How get different size windows in UWP Multiple Views?

走远了吗. 提交于 2019-12-02 09:28:58

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 });
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!