В настоящее время у меня есть проект WPF, который имеет одно главное окно и множество пользовательских элементов управления, которые являются дочерними элементами этого окна. Многие из детей этого окна являются вкладками. Я успешно заменил свое главное окно на пользовательский элемент управления, который реализует почти ту же функциональность, что и главное окно.
Замена окна на UserControl представила одну проблему - в настоящее время наше приложение определяет, какую вкладку программирования отображать на основе родительского окна, используя метод Window.FindName
, показанный ниже. Поэтому мне нужно заменить Application.Current.MainWindow
соответствующим описанием моего основного пользовательского элемента управления. См. Ошибочный метод C # ниже и wpf создание вкладок для пояснения.
Примечание относительно метода Window.FindName () - причина, по которой он не работает после того, как я заменил его на UserControl, заключается в том, что метод FindName осуществляет поиск вверх в визуальном дереве , как описано здесь .
Кто-нибудь знает, как найти пользовательский элемент управления на основе x: Name, похожий на Application.Current.MainWindow
? Кроме того, есть ли лучший способ найти UserControl, чем поиск строки 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>