UWP Light解雇ContentDialog

时间:2016-09-04 13:40:19

标签: xaml uwp windows-10 uwp-xaml

有没有办法让ContentDialog轻松解雇?所以当用户点击ContentDialog之外的任何东西时,它应该被关闭。

感谢。

2 个答案:

答案 0 :(得分:8)

默认情况下, ContentDialog 位于 PopupRoot 中。在它背后,有一个矩形,它会暗淡并阻止与应用程序中其他元素的交互。您可以在 VisualTreeHelper 的帮助下找到它并向其注册 Tapped 事件,因此当点击它时,您可以隐藏 ContentDialog

您可以在 ContentDialog 代码之外调用 ShowAsync 后执行此操作,也可以在 ContentDialog 代码中执行此操作。就个人而言,我实现了一个派生自 ContentElement 的类,并重写 OnApplyTemplate ,如下所示:

let emptySpacesCount = yourString.characters.filter { $0 == " " }.count

并在 OnLockRectangleTapped

protected override void OnApplyTemplate()
{
    // this is here by default
    base.OnApplyTemplate();

    // get all open popups
    // normally there are 2 popups, one for your ContentDialog and one for Rectangle
    var popups = VisualTreeHelper.GetOpenPopups(Window.Current);
    foreach (var popup in popups)
    {
        if (popup.Child is Rectangle)
        {
            // I store a refrence to Rectangle to be able to unregester event handler later
            _lockRectangle = popup.Child as Rectangle;
            _lockRectangle.Tapped += OnLockRectangleTapped;
        }
    }
}

答案 1 :(得分:2)

不幸的是ContentDialog没有提供此类行为。

您可以考虑两种选择:

  • Popup - 为此目的而构建的特殊控件,可在应用内容之上显示类似对话框的UI。此控件实际上为您需要的行为提供IsLightDismissEnabled。由于周年纪念更新(SDK版本1607)也有一个LightDismissOverlayMode,可以设置为" On"显示时自动使Popup周围的UI变暗。更多详情请访问on MSDN

  • 自定义用户界面 - 您可以在XAML中的现有用户界面上创建一个新图层,让此图层覆盖整个屏幕,并观察要解除的Tapped事件它显示时。这比较麻烦,但您可以更多地控制它的显示方式