使用<;TabItem.Header>;,在代码背后
本文关键字:代码 背后 Header lt TabItem 使用 gt | 更新日期: 2023-09-27 17:58:54
在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将其视为标题是按照上面第二个选项卡的方式定义的。
我同意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来查找第一个选项卡的可视子项…
但是。。。再说一次,你可能应该使用数据绑定,所以在做得太多之前,我会确保你遵循了一个好的模式。
我不知道它是否有效,但你可以试试:
(tabItem.Header as ContentControl).FindName("NAME_OF_TEXTBLOCK");