UWP Light解雇ContentDialog

Mos*_*ady 2 xaml windows-10 uwp uwp-xaml

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

谢谢.

The*_*ETJ 8

默认情况下,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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在OnLockRectangleTapped中:

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