在TabControl下的MSDN中取消此示例:
<TabControl>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Ellipse Width="10" Height="10" Fill="DarkGray"/>
<TextBlock>Tab 1</TextBlock>
</StackPanel>
</TabItem.Header>
<StackPanel>
<TextBlock>Enter some text</TextBlock>
<TextBox Name="textBox1" Width="50"/>
</StackPanel>
</TabItem>
<TabItem Header="Tab 2">
<!--Bind TextBlock.Text to the TextBox on the first
TabItem.-->
<TextBlock Text="{Binding ElementName=textBox1, Path=Text}"/>
</TabItem>
</TabControl>
如何从C#代码后面访问<TabItem.Header>
标记内的stackpanel(及其子代)?当我尝试使用.Header
intellisense时,就好像标题是按照上面第二个标签的方式定义的那样。
答案 0 :(得分:2)
我同意HighCore。您应该使用数据绑定而不是尝试直接操作UI元素。如果你想要坚持当前的计划,那就是:
<TabControl>
<TabItem>
<TabItem.Header>
<StackPanel Name="tab1StackPanel" Orientation="Horizontal">
...
</StackPanel>
</TabItem.Header>
</TabItem>
<TabItem Header="Tab 2">
...
</TabItem>
</TabControl>
现在,从后面的代码中你可以直接引用tab1StackPanel
,因为定义Name
会将它公开给代码隐藏的WPF(只要它不在模板中)。
您还可以使用VisualTreeHelper查找第一个标签的可视子项...
但是 ...再一次,您应该使用数据绑定,所以我要确保您在进一步采取行动之前遵循良好的模式。
答案 1 :(得分:0)
我不知道它是否有效,但你可以尝试一下:
(tabItem.Header as ContentControl).FindName("NAME_OF_TEXTBLOCK");