有没有办法让ContentDialog轻松解雇?所以当用户点击ContentDialog之外的任何东西时,它应该被关闭。
感谢。
答案 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
没有提供此类行为。
您可以考虑两种选择: