禁用或删除uwp应用程序中的关闭按钮

时间:2016-04-08 10:58:27

标签: c# win-universal-app

通用应用不允许删除或禁用它似乎关闭按钮。我们可以通过全屏隐藏它。但是当光标移动到它上面时,会带回标题栏。有没有办法删除关闭按钮?

原因:我正在处理屏幕时间。在允许的时间结束后,我想阻止屏幕。我应该删除关闭按钮,以便用户无法克服我的应用程序。

编辑:删除关闭按钮不会完全帮助。这是工作的一部分。我只是想知道如何删除它。

3 个答案:

答案 0 :(得分:3)

使用当前发布的API,我们可以在标题栏中自定义这三个按钮的颜色。但是没有任何属性或方法可用于禁用或删除这些按钮。

在UWP中,我们可以使用ApplicationView.TitleBar | titleBar property获取标题栏,如下所示:

ApplicationViewTitleBar titleBar = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TitleBar;

此属性的类型为ApplicationViewTitleBar。它只有几个属性可以自定义按钮的颜色,如:

titleBar.ButtonBackgroundColor = Windows.UI.Colors.White;
titleBar.ButtonForegroundColor = Windows.UI.Colors.White;
titleBar.ButtonHoverBackgroundColor = Windows.UI.Colors.White;
titleBar.ButtonHoverForegroundColor = Windows.UI.Colors.White;
titleBar.ButtonInactiveBackgroundColor = Windows.UI.Colors.White;
titleBar.ButtonInactiveForegroundColor = Windows.UI.Colors.White;
titleBar.ButtonPressedBackgroundColor = Windows.UI.Colors.White;
titleBar.ButtonPressedForegroundColor = Windows.UI.Colors.White;

使用这些属性可能会使关闭按钮不可见,如:
enter image description here

然而,这实际上并不会隐藏这些按钮。用户仍然可以最小化或最大化应用程序,当指针位于右上角时,他们仍然会看到关闭按钮 enter image description here

在Windows 8.1中,如果我们希望用户只使用某个应用程序而不执行任何其他操作,包括关闭应用程序,我们可以使用 Kiosk模式。有关详细信息,请参阅Enable Kiosk Mode in Windows 8.1Set up a kiosk on Windows 10 Pro, Enterprise, or Education。但是,由于您希望在允许的时间结束后阻止屏幕,因此无法满足您的要求。

因此,UWP可能不是您需求的最佳选择。您可以尝试使用经典桌面应用程序来实现它。

答案 1 :(得分:3)

在Windows 10版本1703(版本10.0.15063)及更高版本中,您可以使用SystemNavigationManagerPreview类阻止应用程序关闭。

将此添加到您的应用清单:

<Capabilities>
    <rescap:Capability Name="confirmAppClose" />
</Capabilities

您需要在Package元素中使用rescap命名空间:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

在主窗体的构造函数中,添加:

var sysNavMgr = SystemNavigationManagerPreview.GetForCurrentView();
sysNavMgr.CloseRequested += OnCloseRequested;

OnCloseRequested可以按如下方式实现:

    private void OnCloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
    {
        var deferral = e.GetDeferral();
        e.Handled = true;
        deferral.Complete();
    }

答案 2 :(得分:0)

在App.Xaml.cs中添加以下代码:

test.abc.lisa.abc.wil