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

我有一个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);
}

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

dhtz124 回答:具有不同大小的多个视图的UWP应用

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

例如:

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));
    }); 
}));
本文链接:https://www.f2er.com/3156160.html

大家都在问