UWP中的最小窗口大小

时间:2017-04-21 23:05:47

标签: uwp window size

在我的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的限制。

限制窗口大小以使其不能小于特定大小的正确方法是什么?

2 个答案:

答案 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;
}