【问题标题】:How to make WPF TabItem Headers' Background transparent?如何使 WPF TabItem 标题的背景透明?
【发布时间】:2015-01-31 20:50:15
【问题描述】:

我有一个带有几个 TabItem 的 TabControl。每个 TabItem 都有一个 Grid,其中包含一个 TextBlock 和一个 Image,其中包含透明区域。

我的目标是让文本和图像完全可见,并通过透明区域看到 Window.Background 图像。

问题:无论我怎么尝试,我设置的 Image 和 TextBlock 后面都是白色背景。

我尝试将 TabControl Opacity 设置为 0,但正如预期的那样,这会使整个事情消失。 与 TabItem 不透明度相同的结果 - > TabItem 变得不可见。 接下来我将 TabItems Foreground、BorderBrush 和 Background 设置为 Opacity="0" 什么都没有改变 :(

我对 WPF 比较陌生,英语不是我的母语,所以如果我的问题很愚蠢并且我的英语不好,请原谅我。

提前致谢!

编辑(截图链接):http://i.stack.imgur.com/NN8AR.png


我不能发截图,因为我没有 10 声望,所以我添加了它的链接。
我删除了图像,只留下了文本框,所以没有混淆

【问题讨论】:

  • 你能上传一些截图并准确显示你想要透明的部分吗?

标签: c# wpf header tabcontrol tabitem


【解决方案1】:

您需要制作一个自定义 TabItem ControlTemplate 来执行此操作。

这里是一个稍微修改的TabItem ControlTemplate(从default一个稍微修改):

<SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />

<SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" />

<SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Grid Background="Transparent">
                    <Border 
                            Name="Border"
                            Margin="0,0,-4,0" 
                            Background="Transparent"
                            BorderBrush="{StaticResource SolidBorderBrush}" 
                            BorderThickness="1,1,1,1" 
                            CornerRadius="2,12,0,0" >
                        <ContentPresenter x:Name="ContentSite"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              ContentSource="Header"
                              Margin="12,2,12,2"
                              RecognizesAccessKey="True"/>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Panel.ZIndex" Value="100" />
                        <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
                        <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您可能需要稍微修改一下以显示选择的 TabItem(在 IsSelected 的触发器中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 2015-11-12
    • 2011-09-10
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多