在我的UWP应用程序中,我想设置一个最小窗口大小,以使窗口不能小于该大小。
我搜索到的任何地方,似乎使用ApplicationView.PreferredLaunchViewSize
是要走的路,但由于某种原因,这在我的应用中无效。
我创建了一个空白的UWP应用并更新了OnLaunched方法,如下所示:
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
ApplicationView.PreferredLaunchViewSize = new Size(1200, 900);
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
ApplicationView.GetForCurrentView().SetPreferredMinSize(new Size(800, 600));
...
}
我的应用程序以1200 x 900的正确大小启动,但我可以将窗口缩小到小于我为应用程序设置的800 x 600的限制。
限制窗口大小以使其不能小于特定大小的正确方法是什么?
答案 0 :(得分:5)
SetPreferredMinSize
是正确的API,但有两个重要注意事项:
首先,请记住CoreWindow的API在DIPS(设备无关像素空间)中运行,而不是真正的像素'。如果要设置最小320 x 200像素,则需要确保按当前DPI值缩放值。
其次,在UWP中,您确实无法控制演示文稿窗口大小,但只能表达偏好。你无法获得800 x 600工作的原因是“最低限度”'尺寸实际上是500 x 500像素。请参阅MSDN。
在我的Direct3D VS Game templates中,我使用320 x 200作为最小尺寸:
auto minSize = Size(ConvertPixelsToDips(320), ConvertPixelsToDips(200));
view->SetPreferredMinSize(minSize);
答案 1 :(得分:0)
添加到 App.xaml 代码:
private readonly double minW = 800, minH = 600;
protected override void OnWindowCreated(WindowCreatedEventArgs args) {
SetWindowMinSize(new Size(args.Window.Bounds.Width, args.Window.Bounds.Height));
args.Window.CoreWindow.SizeChanged += CoreWindow_SizeChanged;
base.OnWindowCreated(args);
}
private void CoreWindow_SizeChanged(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.WindowSizeChangedEventArgs args) {
if (SetWindowMinSize(args.Size)) sender.ReleasePointerCapture();
}
private bool SetWindowMinSize(Size size) {
if (size.Width < minW || size.Height < minH) {
if (size.Width < minW) size.Width = minW;
if (size.Height < minH) size.Height = minH;
return ApplicationView.GetForCurrentView().TryResizeView(size);
}
return false;
}