【问题标题】:add a textblock just before first tabitem wpf在第一个 tabitem wpf 之前添加一个文本块
【发布时间】:2013-12-26 13:29:19
【问题描述】:

我想在 TabControl 上的第一个选项卡项之前显示我公司的名称。

我尝试直接在 TabControl 中添加一个 TextBlock。但似乎在第一个 TabItem 之前添加了一个没有任何标题的新 TabItem,并且在新创建的 TabItem 内我得到了我公司的名称。

代码如下:

<TabControl>
    <TextBlock Text="MyCompanyName" />
    <TabItem Header="FirstTabITem" />
    <TabItem Header="SecondTabITem" />
</TabControl>

这是WPF的限制吗?

【问题讨论】:

  • 您为什么要这样做?这违反了所有标准和准则。您可以在 WPF 中执行此操作,但工作量很大,使用您的控件的每个人都会感到困惑。
  • @nvoigt 我的选项卡控件是我窗口的根。那么指定公司名称的最佳位置是什么?
  • 我不知道,这是你必须决定的事情。你必须设计你的窗户。也许您需要一个不同的根目录,上面有您的公司名称和徽标,下面有选项卡控件?只有您可以决定,但请注意,如果技术方面存在问题,则可能不应该那样使用。

标签: c# wpf xaml


【解决方案1】:

我相信您要做的是在默认的TabControl.Template 中覆盖&lt;TabPanel&gt; 周围的XAML。我过去做过一次,而且还不错。

如果您有 Blend,您可以轻松地创建一个 TabControl.Template 的副本以进行修改,或者您可以找到一个示例 MSDN 模板 here 并使用它。

如果您使用 MSDN 示例模板,只需将 &lt;TabPanel&gt; 包裹在其他名称中,例如 DockPanel,然后添加带有您公司名称的 &lt;TextBlock&gt;

<Style TargetType="{x:Type TabControl}">

  ...

  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TabControl}">
        <Grid KeyboardNavigation.TabNavigation="Local">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <DockPanel Grid.Row="0">
              <TextBlock Text="Company Name" DockPanel.Dock="Left" />
              <TabPanel Name="HeaderPanel" IsItemsHost="True" ... />
          </DockPanel>

          ...

        </Grid>
      </ControlTemplate>
    </Setter.Value>
 </Style>

【讨论】:

  • 谢谢瑞秋。这正是我想要的。
【解决方案2】:

使用它可能对你有帮助

        <TabItem Header="My Company Name" IsEnabled="False"/>
        <TabItem Header="FirstTabITem" />
        <TabItem Header="SecondTabITem" />
    </TabControl>

【讨论】:

    【解决方案3】:

    编辑第一个选项卡项的样式,如下所示。

     <TabControl Margin="20">
            <TabItem IsEnabled="False" >
                <TabItem.Style>
                    <Style TargetType="TabItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <TextBlock Text="My Company" Margin="0,0,5,0"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </TabItem.Style>
            </TabItem>
        <TabItem Header="FirstTabITem" IsSelected="True"/>
        <TabItem Header="SecondTabITem" />
      </TabControl>
    

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多