XAML код:
<TabControl TabStripPlacement="Left" Margin="-3,-3,-3,-3" Background="Transparent" SelectionChanged="TabControl_SelectionChanged">
<TabItem Header="Corn">
<Grid x:Name="sdfsfd"/>
</TabItem>
<TabItem Header="TabItem" >
<local:CornTab x:Name="cornTab"/>
</TabItem>
</TabControl>
Код CS:
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) {
TabItem ti = ((TabControl)sender).SelectedItem as TabItem;
Console.WriteLine(ti.Header);
getChildrenOf(ti, 1);
}
private void getChildrenOf(DependencyObject dep, int indents) {
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dep); i++) {
var child = VisualTreeHelper.GetChild(dep, i);
Console.WriteLine($"{new String('\t', indents)}{i}: {child.GetType()}");
getChildrenOf(child, indents + 1);
}
}
Я пытаюсь получить <local:CornTab x:Name="cornTab"/>
, когда нажимаю TabItem
, но независимо от того, что я делаю, в VisualTreeHelper
, похоже, ничего не получится, и распечатки будут одинаковыми, с той лишь разницей, что TabItem.Header
.
TabItem
0: System.Windows.Controls.Border
0: System.Windows.Controls.Grid
0: MahApps.Metro.Controls.ContentControlEx
0: System.Windows.Controls.Grid
0: System.Windows.Controls.ContentPresenter
0: System.Windows.Controls.TextBlock
1: MahApps.Metro.Controls.Underline
0: System.Windows.Controls.Border
0: MahApps.Metro.Controls.ClipBorder
0: System.Windows.Controls.ContentPresenter
Corn
0: System.Windows.Controls.Border
0: System.Windows.Controls.Grid
0: MahApps.Metro.Controls.ContentControlEx
0: System.Windows.Controls.Grid
0: System.Windows.Controls.ContentPresenter
0: System.Windows.Controls.TextBlock
1: MahApps.Metro.Controls.Underline
0: System.Windows.Controls.Border
0: MahApps.Metro.Controls.ClipBorder
0: System.Windows.Controls.ContentPresenter
Возможно, мне нужно пройти по дереву управления иначе?