UWP 查找名称 return 空
UWP FindName return null
我有一个 UWP 应用,其 MainPage 包含一个名为 Splitview 的 SplitView :
<SplitView x:Name="SplitView" ...>
在这个 SplitView 中,我有一个包含用于导航的 ListView 的用户控件,当单击 ListViewItem 时,我导航到另一个页面,但我想在导航之前关闭 SplitView 的窗格。因此,在我的 ListeView itemclick 事件后面的用户控件代码中,我访问了父框架,然后尝试使用 FindName 访问 SplitView 并关闭它:
var parentPage = ((Frame)Window.Current.Content);
if (parentPage != null)
{
SplitView splitview = (SplitView)parentPage.FindName("SplitView");
splitview.IsPaneOpen = false;
}
parentPage 很好地引用了 MainPage,但是这一行:
SplitView splitview = (SplitView)parentPage.FindName("SplitView");
始终return 为空。我会错过什么吗?
在此先感谢您的帮助,
此致
A Frame
是一个具有导航历史、后退堆栈等的对象。应用程序的 window 有一个内容元素,通常是您提到的框架。但 Frame 本身也有一个内容元素,即当前显示在该 Frame 中的 Page
(或通常的 FrameworkElement
)。因此,要获得 currentPage
,您需要执行以下操作:
var parentPage = (Page)((Frame)Window.Current.Content).Content;
FindName
仅从当前控件的直接子项返回元素。它不是递归遍历所有后代来找到匹配项。
调试此类问题时,您可以使用 "Live Visual Tree" 让您轻松找到 XAML 控件的组织方式:
因为你的 SplitView
已经命名并且可以从后面的代码访问,你可以直接使用它。
如果您在另一个控件中,您可以通过 属性 公开它或执行从子到子的递归搜索。
我有一个 UWP 应用,其 MainPage 包含一个名为 Splitview 的 SplitView :
<SplitView x:Name="SplitView" ...>
在这个 SplitView 中,我有一个包含用于导航的 ListView 的用户控件,当单击 ListViewItem 时,我导航到另一个页面,但我想在导航之前关闭 SplitView 的窗格。因此,在我的 ListeView itemclick 事件后面的用户控件代码中,我访问了父框架,然后尝试使用 FindName 访问 SplitView 并关闭它:
var parentPage = ((Frame)Window.Current.Content);
if (parentPage != null)
{
SplitView splitview = (SplitView)parentPage.FindName("SplitView");
splitview.IsPaneOpen = false;
}
parentPage 很好地引用了 MainPage,但是这一行:
SplitView splitview = (SplitView)parentPage.FindName("SplitView");
始终return 为空。我会错过什么吗?
在此先感谢您的帮助,
此致
A Frame
是一个具有导航历史、后退堆栈等的对象。应用程序的 window 有一个内容元素,通常是您提到的框架。但 Frame 本身也有一个内容元素,即当前显示在该 Frame 中的 Page
(或通常的 FrameworkElement
)。因此,要获得 currentPage
,您需要执行以下操作:
var parentPage = (Page)((Frame)Window.Current.Content).Content;
FindName
仅从当前控件的直接子项返回元素。它不是递归遍历所有后代来找到匹配项。
调试此类问题时,您可以使用 "Live Visual Tree" 让您轻松找到 XAML 控件的组织方式:
因为你的 SplitView
已经命名并且可以从后面的代码访问,你可以直接使用它。
如果您在另一个控件中,您可以通过 属性 公开它或执行从子到子的递归搜索。