我正在使用此示例来自定义TabControl:
TabControlStyle - 第三部分.zip: https://web.archive.org/web/20160319001935/http://www.blogs.intuidev.com/file.axd?file=2010%2f2%2fTabControlStyle+-+Part+Three.zip
来自网址:
现在如果你运行并选择样本5(TabControl_5_ScrollableTabPanel),你会发现一切正常。打开弹出窗口也可以。
然而,当添加一个带有自定义标题的新tabitem并打开右侧的弹出窗口时,会使tabitem的标题重置为最小尺寸并且内容丢失。
在TabControl_5_ScrollableTabPanel.xaml的示例中,我刚刚在现有的Tab 2和Tab 3之间添加了一个额外的tabitem:
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Rectangle Width="16" Height="16" Fill="Red" />
<TextBlock Text="Test" />
</StackPanel>
</TabItem.Header>
</TabItem>
我在UIElement.Measure()之后看到,DesiredSize对于带有自定义标题的标签不正确。 在ScrollableTabPanel中,我尝试更改 MeasureOverride 方法,以便对标题进行额外检查:
//Loop through all child controls ...
foreach (UIElement uieChild in this.InternalChildren)
{
// test:
TabItem uieChildTabItem = uieChild as TabItem;
if (uieChildTabItem != null && uieChildTabItem.HasHeader && uieChildTabItem.Header != null)
{
UIElement uieChildHeader = uieChildTabItem.Header as UIElement;
if (uieChildHeader != null)
{
uieChildHeader.Measure(availableSize);
resultSize.Width += uieChildHeader.DesiredSize.Width;
}
}
// ...
...但它仍然没有将标题恢复到原始大小,显示其内容。
有没有人知道哪里出错了,为什么我的解决方案似乎不起作用?
答案 0 :(得分:0)
您可以尝试将TabItem声明如下:
<TabItem Header="TabTest">
<TabItem.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Width="16" Height="16" Fill="Red" />
<TextBlock Text="Test" />
</StackPanel>
</DataTemplate>
</TabItem.HeaderTemplate>
</TabItem>
根据此Tab Panel实现,它直接将TabItem的标题绑定到弹出窗口中的上下文菜单项标题。如果您尝试将某个UI元素提供给选项卡项标题而不是字符串,则会产生问题,并且此选项卡面板尝试在可视树中两次承载相同的UI元素。由于不允许,因此它从TabItem的标题中删除了UI元素,并仅显示在菜单项的标题中。