我目前有一个 WPF 项目,它有一个主窗口和许多用户控件,它们是这个窗口的子窗口。此窗口的许多子项都是选项卡。我已经成功地用一个用户控件替换了我的主窗口,它实现了与主窗口几乎完全相同的功能。
Window.FindName
用 UserControl 替换 Window 引入了一个问题 - 目前我们的应用程序通过使用下面显示的方法根据父窗口确定要显示哪个编程选项卡。因此,我需要Application.Current.MainWindow
用我的主要用户控件的适当描述替换 。请参阅下面的错误 C# 方法和选项卡的 wpf 实例化以进行说明。
注意关于 Window.FindName() 方法- 我用 UserControl 替换它后它不起作用的原因是 FindName 方法在可视树中向上搜索,如此处所述。
有谁知道如何根据 x:Name 找到用户控件,类似于Application.Current.MainWindow
?此外,有没有比查找 x:Name 字符串更好的方法来查找 UserControl,以防它被重命名?
我们目前如何找到 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>