具有不同大小的多个视图的 UWP 应用程序
UWP app with multiple views with different sizes
我有一个 UWP 应用程序。我想从应用程序创建新的 windows,但任何后续的 window 都需要比主 window 小一些。关于调整主要 window 的大小,我不做任何事情,让 OS 为我调整大小。
我提出一个新的 window 是这样的:
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);
}
当主 window 出现时,它出现得很好。当我点击进入该功能的按钮时,新的 window 与主 window 的大小相同。我重新打开应用程序,但现在主 window 以我希望新 window 显示的大小显示。然后单击按钮以显示新 window 显示新 window 的尺寸是我想要的。所以我有点困惑。我是否以正确的方式设置尺寸?这里还有什么明显的错误吗?
正如@Raymond Chen 所说,PreferredLaunchViewSize 设置应用程序启动时的大小,它会改变您的主要window 的大小。您可以使用ApplicationView.TryResizeView 方法来设置新window 的大小。
例如:
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));
});
}));
我有一个 UWP 应用程序。我想从应用程序创建新的 windows,但任何后续的 window 都需要比主 window 小一些。关于调整主要 window 的大小,我不做任何事情,让 OS 为我调整大小。
我提出一个新的 window 是这样的:
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);
}
当主 window 出现时,它出现得很好。当我点击进入该功能的按钮时,新的 window 与主 window 的大小相同。我重新打开应用程序,但现在主 window 以我希望新 window 显示的大小显示。然后单击按钮以显示新 window 显示新 window 的尺寸是我想要的。所以我有点困惑。我是否以正确的方式设置尺寸?这里还有什么明显的错误吗?
正如@Raymond Chen 所说,PreferredLaunchViewSize 设置应用程序启动时的大小,它会改变您的主要window 的大小。您可以使用ApplicationView.TryResizeView 方法来设置新window 的大小。
例如:
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));
});
}));