[英]WPF: custom TabControl - TabItem Header gets lost
我正在使用此示例来自定义TabControl:
TabControlStyle-第三部分.zip: https ://web.archive.org/web/20160319001935/http://www.blogs.intuidev.com/file.axd ? file = 2010%2f2%2fTabControlStyle +-+ Part + Three 。压缩
来自网址:
现在,如果您运行并选择示例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;
}
}
// ...
...但是它仍然不能将标头恢复到原始大小,无法显示其内容。
有人看到哪里出了问题,为什么我的解决方案似乎不起作用?
您可以尝试如下声明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>
按照此选项卡面板的实现,它直接将TabItem的标题绑定到弹出菜单中的上下文菜单项标题。 如果您尝试给选项卡项目标题提供一些UI元素而不是字符串,这会产生问题,并且此选项卡面板试图在视觉树中两次托管相同的UI元素。 由于不允许这样做,因此它从TabItem的标题中删除了UI元素,仅显示在菜单项的标题中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.