在 UWP 中,我如何获取 Grid 的实例,它位于 Flyout 中,它本身位于 ResourceDictionary 中?
In UWP, how would I get the instance of a Grid, that's in a Flyout, that is itself in a ResourceDictionary?
我有一个 UWP 应用程序,它将部署到带有屏幕的设备上。该设备是 运行 Windows 10 IoT 核心。
我想要某种形式的警报系统,但因为我无法使用 UWP ToastNotification
,所以我决定创建自己的警报系统。我为通知创建了一个 UserControl
,效果很好。我在 Flyout
中动态显示控件,在一定程度上可以正常工作。
浮出控件位于 ResourceDictionary 中,如下所示:
<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>
我有一个静态class...
static class Globals
{
public static Flyout GlobalFlyout;
}
...这使我可以从我的代码中的任何 class 引用浮出控件(通过内容框架动态加载的页面)。
在我的 MainPage 实例中,我创建了这样的引用:
Globals.GlobalFlyout = (Flyout)Application.Current.Resources["ToastNotificationFlyout"];
然后我可以在 C# 中引用 Flyout
,但我似乎无法获得对 Grid
的引用。
Flyout 不包含 .FindName()
方法,使用 VisualTreeHelper
会引发灾难性异常(在另一个用户的另一个 SO 问题中进行了解释)。
我还尝试了对 .FindChild()
和 .FindControl()
的各种调用,我在这里和其他社区都找到了,但是 none 适用于这种情况。
Flyout 的内容很简单,模仿了常规 Win10 toast 通知的外观。
有没有想过如何在 Flyout
中引用 Grid
,以便我可以添加通知控件的实例?
Grid
实际存放在Flyout.Content
property下:
var grid = (Grid)Globals.GlobalFlyout.Content;
当您将直接子代放在 Flyout
中时,XAML 会将其解释为 Content
。这是使用 ContentPropertyAttribute
.
在幕后完成的
我有一个 UWP 应用程序,它将部署到带有屏幕的设备上。该设备是 运行 Windows 10 IoT 核心。
我想要某种形式的警报系统,但因为我无法使用 UWP ToastNotification
,所以我决定创建自己的警报系统。我为通知创建了一个 UserControl
,效果很好。我在 Flyout
中动态显示控件,在一定程度上可以正常工作。
浮出控件位于 ResourceDictionary 中,如下所示:
<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>
我有一个静态class...
static class Globals
{
public static Flyout GlobalFlyout;
}
...这使我可以从我的代码中的任何 class 引用浮出控件(通过内容框架动态加载的页面)。
在我的 MainPage 实例中,我创建了这样的引用:
Globals.GlobalFlyout = (Flyout)Application.Current.Resources["ToastNotificationFlyout"];
然后我可以在 C# 中引用 Flyout
,但我似乎无法获得对 Grid
的引用。
Flyout 不包含 .FindName()
方法,使用 VisualTreeHelper
会引发灾难性异常(在另一个用户的另一个 SO 问题中进行了解释)。
我还尝试了对 .FindChild()
和 .FindControl()
的各种调用,我在这里和其他社区都找到了,但是 none 适用于这种情况。
Flyout 的内容很简单,模仿了常规 Win10 toast 通知的外观。
有没有想过如何在 Flyout
中引用 Grid
,以便我可以添加通知控件的实例?
Grid
实际存放在Flyout.Content
property下:
var grid = (Grid)Globals.GlobalFlyout.Content;
当您将直接子代放在 Flyout
中时,XAML 会将其解释为 Content
。这是使用 ContentPropertyAttribute
.