Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
560 views
in Technique[技术] by (71.8m points)

c# - How get different size windows in UWP Multiple Views?

In the following code I can not tinker with the ViewSizePreference options and get the child to be smaller than the parent. I am making a popup from a page. That part works fine. However, both windows are the exact same size.

private async void Test_Click(object sender,RoutedEventArgs e){
var currentAV = ApplicationView.GetForCurrentView();
var newAV = CoreApplication.CreateNewView();
await newAV.Dispatcher.RunAsync(
                CoreDispatcherPriority.Normal,
                async () =>
                {
                    var newWindow = Window.Current;
                    var newAppView = ApplicationView.GetForCurrentView();
                    newAppView.Title = "New window";

                    var frame = new Frame();
                    frame.Navigate(typeof(MainPage), null);
                    newWindow.Content = frame;
                    newWindow.Activate();

                    await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
                        newAppView.Id,
                        ViewSizePreference.UseMinimum,
                        currentAV.Id,
                        ViewSizePreference.UseMinimum);
                });
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

However, both windows are the exact same size.

Yes, I just found the same issue, and I've reported this issue. As soon as I get the response of this issue, I will post here.

By now, we can use a workaround to solve this problem, since your want to expand a new window with a smaller size than the main window, you can use ApplicationView.TryResizeView | tryResizeView method to set the size of new window programmatically.

For example:

private async void Test_Click(object sender, RoutedEventArgs e)
{
    var currentAV = ApplicationView.GetForCurrentView();
    //get the bounds of current window.
    var rect = Window.Current.Bounds;
    var newAV = CoreApplication.CreateNewView();
    await newAV.Dispatcher.RunAsync(
                    CoreDispatcherPriority.Normal,
                    async () =>
                    {
                        var newWindow = Window.Current;
                        var newAppView = ApplicationView.GetForCurrentView();
                        newAppView.Title = "New window";

                        var frame = new Frame();
                        //send current window's size as parameter.
                        frame.Navigate(typeof(MainPage), rect.Width.ToString() + ":" + rect.Height.ToString());
                        newWindow.Content = frame;
                        newWindow.Activate();

                        await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
                            newAppView.Id,
                            ViewSizePreference.UseHalf,
                            currentAV.Id,
                            ViewSizePreference.UseHalf);
                    });
}

Then in the OnNavigatedTo method and Loaded event:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    if (size != null)
    {
        var newwidth = Convert.ToInt32(size[0]) - 300;
        var newheight = Convert.ToInt32(size[1]) - 200;
        ApplicationView.GetForCurrentView().TryResizeView(new Size { Width = newwidth, Height = newwidth });
    }
}

private string[] size;

protected override void OnNavigatedTo(NavigationEventArgs e)

{
    if (e.Parameter.ToString() != "")
    {
        size = e.Parameter.ToString().Split(':');
    }
}

Or if you don't mind to see the resizing process of the new window, you can also try this code, and there is no need to send size as parameter to the new window in this method:

var frame = new Frame();
frame.Navigate(typeof(MainPage), null);
newWindow.Content = frame;
newWindow.Activate();

await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
    newAppView.Id,
    ViewSizePreference.UseHalf,
    currentAV.Id,
    ViewSizePreference.UseHalf);
newAppView.TryResizeView(new Size { Width = rect.Width - 300, Height = rect.Height - 200 });

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...