Wpf 基于内容控制设置父级的背景';内容

Wpf 基于内容控制设置父级的背景';内容,wpf,styles,Wpf,Styles,我有一个选项卡项(默认样式)模板,其中选项卡项的背景设置为固定颜色 <Style x:Key="tbitem" TargetType="{x:Type TabItem}"> <Setter Property="Focusable" Value="True"/> <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/> <Se

我有一个选项卡项(默认样式)模板,其中选项卡项的背景设置为固定颜色

<Style x:Key="tbitem" TargetType="{x:Type TabItem}">
        <Setter Property="Focusable" Value="True"/>
        <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
        <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Continue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Border Name="Border" BorderBrush="Transparent" BorderThickness="0" CornerRadius="0" Margin="0" Background="Transparent" >
                        <DockPanel>
                            <Label   x:Name="TabLabel" DockPanel.Dock="Left" Foreground="White" FontWeight="ExtraBold" FontFamily="Segoe UI" FontSize="14" >
                                    <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  x:Name="ContentSite" RecognizesAccessKey="True" ContentSource="Header" />
                            </Label>
                            <Button Name="PART_BTNCLOSE" DockPanel.Dock="Right" Style="{StaticResource CloseButtonStyle}" Command="USD:ActionCommands.CloseSessionTab"/>
                        </DockPanel>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="100"/>
                            <Setter TargetName="Border" Property="BorderBrush" Value="Green"/>
                            <Setter TargetName="Border" Property="Background" Value="Green"/>
                            <Setter TargetName="Border" Property="Margin" Value="2,0,0,0"/>
                            <Setter TargetName="PART_BTNCLOSE" Property="Visibility" Value="{Binding CloseButtonVisibility}"/>
                            <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
                            <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Continue"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="TabLabel" Property="Foreground" Value="#666666"/>
                        </Trigger>

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

我的实际tabitem包含一个textblock来显示选项卡标题

<TabItem Style="{StaticResource SessionTabs}" >
                <TabItem.Header>
                    <TextBlock Text="Tab 1"  >

                    </TextBlock>

                </TabItem.Header>

            </TabItem>

到目前为止一切正常。问题是。。然而,有时我不得不根据一些条件改变我的标签颜色,如果我对我的文本块这样做,那么它的外观和感觉是非常奇怪的。


有没有办法设置我父母的边框背景以匹配我的文本块背景?或者以某种方式从子项触发/更新祖先的背景?

将标签填充设置为0,并更改TabItemHeader,如下所示:

<TabItem.Header>
   <Grid Background="Red" Margin="0 0 -10 0">
      <TextBlock Margin="5 5 15 5" Text="Tab 1"/>
   </Grid>
</TabItem.Header>


-10是您的按钮宽度,15是(5+按钮宽度)

对不起。。别费心解释样式名称的不同。。tbItems和SessionTab都是相同的。您的
TextBlock
是静态的还是正在从代码后面更改背景?如果您正在从后面的代码以及
TextBlock
进行更改,您也可以更新
TabItem
背景。最好的方法是通过双向绑定将两个控件的背景绑定到某个属性。。。不幸的是,由于一些不可避免的情况,我不能使用代码隐藏。。。是否有任何不带代码的选项可用?但我只能将背景设置为我的文本块。。不是真的要付账:(您可以更改代码并将Grid设置为textblock的父级吗?如果您可以这样做,那么您可以设置Grid Background OK,我可以这样做。我可以用网格包装我的textblock,但这会占用整个标签并删除奇怪的外观吗?不,对不起,我已经编辑了答案。只需将标签填充设置为0,将textblock填充设置为5年,就解决了问题但是如果你看到我的屏幕截图,我的标签上也有一个X来关闭它,它也在同一个边框下。现在我的X有一个不同的颜色,标签的所有其他部分都有不同的颜色:)我blv设置背景颜色,这对我来说只是一个选项。。