在 UWP 中,如何获取网格的实例,该实例位于浮出控件中,该网格本身位于资源字典中?



我有一个 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;

将直接子项放入FlyoutXAML 将其解释为Content。这是使用ContentPropertyAttribute在引擎盖下完成的。

相关内容

  • 没有找到相关文章