繁体   English   中英

WPF:自定义TabControl-TabItem标头丢失

[英]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 。压缩

来自网址:

https://web.archive.org/web/20160319001935/http://www.blogs.intuidev.com/post/2010/02/10/TabControlStyling_PartThree.aspx

现在,如果您运行并选择示例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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM