xaml - UWP Light 关闭 ContentDialog

标签 xaml uwp windows-10 uwp-xaml

有没有办法让 ContentDialog 灯消失?这样,当用户单击 ContentDialog 之外的任何内容时,它应该关闭。

谢谢。

最佳答案

默认情况下,ContentDialog 放置在 PopupRoot 中。在它的后面,有一个矩形,它会变暗并阻止与应用程序中的其他元素交互。您可以在 VisualTreeHelper 的帮助下找到它,并向其注册 Tapped 事件,这样当它被点击时,您就可以隐藏 ContentDialog

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

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

OnLockRectangleTapped中:

private void OnLockRectangleTapped(object sender, TappedRoutedEventArgs e)
{
    this.Hide();
    _lockRectangle.Tapped -= OnLockRectangleTapped;
}

关于xaml - UWP Light 关闭 ContentDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317526/

相关文章:

c# - 失去焦点时关闭弹出窗口

exe - 从 UWP 应用启动 Exe

.net - 高级 XAML 数据绑定(bind)教程

wpf - 使 WPF TextBox 仅与它所拥有的房间一样宽,但随着空间的扩大而扩大?

c# - WPF 筛选列表框

c# - [UWP][C#] 覆盖 Appx.cs 中设置的 backpress 导航

c# - 将按钮插入 NavigationViewItem UWP

c# - 升级到 Windows 10 后 WMI 不工作

javascript - 无法使用 W10 和 MS Edge 使用 Facebook 插件添加评论

mysql - 在 Windows 上安装 MySQL 5.7