我有一个 UWP 应用,它将部署到带有屏幕的设备。设备运行的是 Windows 10 IoT Core。
我想拥有某种形式的警报系统,并且由于我无法使用UWPToastNotification
,因此我决定创建自己的警报系统。我为通知创建了一个UserControl
,工作正常。我在Flyout
中动态显示控件,并且在一定程度上工作正常。
浮出控件位于资源字典中,如下所示:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HCI">
<Flyout x:Key="ToastNotificationFlyout" x:Name="ToastFlyout"
ShowMode="Transient" AllowFocusOnInteraction="False">
<Grid x:Name="ToastContainer" />
</Flyout>
</ResourceDictionary>
我有一个静态类...
static class Globals
{
public static Flyout GlobalFlyout;
}
。这允许我从代码中的任何类(通过内容框架动态加载的页面(引用浮出控件。
在我的主页实例中,我创建了如下引用:
Globals.GlobalFlyout = (Flyout)Application.Current.Resources["ToastNotificationFlyout"];
然后我可以在 C# 中引用Flyout
,但我似乎无法获得对Grid
的引用。 浮出控件不包含.FindName()
方法,使用VisualTreeHelper
会引发灾难性异常(其他用户在另一个 SO 问题中进行了解释(。 我也尝试了各种.FindChild()
和.FindControl()
的调用,我在这里和其他社区找到了这些调用,但没有一个适用于这种情况。
浮出控件的内容很简单,模仿常规 Win10 Toast 通知的外观。
关于如何在Flyout
中引用Grid
的任何想法,以便我可以添加通知控件的实例?
Grid
实际上存储在Flyout.Content
属性下:
var grid = (Grid)Globals.GlobalFlyout.Content;
将直接子项放入Flyout
XAML 将其解释为Content
。这是使用ContentPropertyAttribute
在引擎盖下完成的。