有没有办法使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;
}

10-06 03:44