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