Windows 具有多个不同大小视图的UWP应用程序

Windows 具有多个不同大小视图的UWP应用程序,windows,uwp,win-universal-app,windows-10-universal,uwp-xaml,Windows,Uwp,Win Universal App,Windows 10 Universal,Uwp Xaml,我有一个UWP应用程序。我想从应用程序中创建新窗口,但任何后续窗口都需要比主窗口小一些。我不做任何关于调整主窗口大小的事情,让操作系统为我调整大小 我打开了一个新窗口,如下所示: auto window = CoreApplication::CreateNewView(); window->show(); void NewWindow::show() { auto currView = ApplicationView::GetForCurrentView(); currV

我有一个UWP应用程序。我想从应用程序中创建新窗口,但任何后续窗口都需要比主窗口小一些。我不做任何关于调整主窗口大小的事情,让操作系统为我调整大小

我打开了一个新窗口,如下所示:

auto window = CoreApplication::CreateNewView();
window->show();

void NewWindow::show() {
    auto currView = ApplicationView::GetForCurrentView();
    currView->PreferredLaunchViewSize =
        Windows::Foundation::Size(float(options.width), float(options.height));
    currView->PreferredLaunchWindowingMode = ApplicationViewWindowingMode::PreferredLaunchViewSize;
    currView->SetPreferredMinSize(Size(20,20));

    Xaml::Window::Current->Activate();

    ApplicationViewSwitcher::TryShowAsStandaloneAsync(
        window_->id(),
        ViewSizePreference::Default,
        window_->parentId(),
        ViewSizePreference::Default);
}

当主窗口打开时,它正好打开。当我点击进入这个功能的按钮时,新窗口的大小与主窗口的大小相同。我重新打开应用程序,但现在主窗口显示的大小与我希望新窗口显示的大小相同。然后单击按钮打开新窗口,打开我想要的大小的新窗口。所以我有点困惑。我设置的尺寸正确吗?这里还有什么明显的错误吗?

正如@Raymond Chen所说,PreferredLaunchViewSize在应用程序启动时设置大小,它将更改主窗口的大小。您可以使用方法设置新窗口的大小

例如:

auto parentView = ApplicationView::GetForCurrentView();
auto newView = CoreApplication::CreateNewView();

newView->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal,
        ref new Windows::UI::Core::DispatchedHandler([this,parentView]()
{
    int newViewId = 0;
    Windows::UI::Xaml::Controls::Frame^ rootFrame = ref new Windows::UI::Xaml::Controls::Frame();
    rootFrame->Navigate(Windows::UI::Xaml::Interop::TypeName(MainPage::typeid), nullptr);
    Window::Current->Content = rootFrame;
    // You have to activate the window in order to show it later.
    Window::Current->Activate();

    newViewId = ApplicationView::GetForCurrentView()->Id;
    IAsyncOperation<bool>^ mytask = ApplicationViewSwitcher::TryShowAsStandaloneAsync(newViewId);
    auto deviceEnumTask = concurrency::create_task(mytask);
    deviceEnumTask.then([this](bool res)
    {
        // set the size of new window
        ApplicationView::GetForCurrentView()->TryResizeView(Size(600, 320));
    }); 
}));
autoparentview=ApplicationView::GetForCurrentView();
auto newView=CoreApplication::CreateNewView();
newView->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal,
ref新Windows::UI::Core::DispatchedHandler([this,parentView]()
{
int newViewId=0;
Windows::UI::Xaml::Controls::Frame^rootFrame=ref新建Windows::UI::Xaml::Controls::Frame();
根框架->导航(Windows::UI::Xaml::Interop::TypeName(MainPage::typeid),nullptr);
窗口::当前->内容=根框架;
//您必须激活该窗口,以便稍后显示。
窗口::当前->激活();
newViewId=ApplicationView::GetForCurrentView()->Id;
IAsyncOperation ^mytask=ApplicationViewSwitcher::TryShowAsStandaloneAsync(newViewId);
auto deviceEnumTask=并发::创建_任务(mytask);
deviceEnumTask.then([此](布尔值)
{
//设置新窗口的大小
ApplicationView::GetForCurrentView()->TryResizeView(大小(600320));
}); 
}));

PreferredLaunchViewSize控制应用程序启动时的视图大小。如果要调整次视图的大小,可以使用
TryResizeView