我目前有一个WPF项目,它有一个主窗口和许多作为该窗口子级的用户控件。该窗口的许多子项是选项卡。我已经成功地用实现几乎完全相同功能的用户控件替换了我的主窗口。
用用户控件替换窗口引入了一个问题 - 目前我们的应用程序根据父窗口使用下面显示的Window.FindName
方法确定要显示哪个编程选项卡。因此,我需要用我的主用户控件的适当描述来替换Application.Current.MainWindow
。请参见下面出错的C#方法和wpf选项卡实例以获得澄清。
关于Window.FindName()方法的注意事项 - 之所以在我用用户控件替换后它不起作用,是因为FindName方法向上搜索可视树,如此描述。
有人知道如何基于x:Name查找用户控件,类似于Application.Current.MainWindow
吗?此外,是否有更好的方法查找用户控件,而不是查找x:Name字符串,以防它被重命名?
我们目前如何找到MainWindow - 现在需要找到MainUserControl:
(C#)
private static void SetCurrentProgram(int num)
{
Window window = Application.Current.MainWindow;
ProgrammingTab programmingTab1 = window.FindName("ProgrammingTab1") as ProgrammingTab;
ProgrammingTab programmingTab2 = window.FindName("ProgrammingTab2") as ProgrammingTab;
programmingTab1.Visibility = num == 1 ? Visibility.Visible : Visibility.Collapsed;
programmingTab2.Visibility = num == 2 ? Visibility.Visible : Visibility.Collapsed;
}
编程选项卡的实例化。
(xaml)
<Grid>
<ProgrammingControl:ProgrammingTab x:Name="ProgrammingTab1" Program="1" IsVisibleChanged="ProgrammingTab_IsVisibleChanged" />
<ProgrammingControl:ProgrammingTab x:Name="ProgrammingTab2" Program="2" IsVisibleChanged="ProgrammingTab_IsVisibleChanged" />
</Grid>