【问题标题】:UWP app with multiple views with different sizes具有多个不同大小视图的 UWP 应用
【发布时间】:2020-03-02 08:15:28
【问题描述】:

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

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

【问题讨论】:

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

标签: windows uwp win-universal-app windows-10-universal uwp-xaml


【解决方案1】:

正如@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));
    }); 
}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多