【问题标题】:Set background of parent based on Content Control's content根据 Content Control 的内容设置父级背景
【发布时间】:2018-09-11 00:14:20
【问题描述】:

我有这个 tabitem(默认样式)模板,其中标签项的背景设置为固定颜色。

<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 包含一个文本块来显示选项卡标题

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

                    </TextBlock>

                </TabItem.Header>

            </TabItem>

到目前为止一切正常。问题是.. 但是有时我必须根据某些条件更改我的标签颜色之一,如果我对我的文本块进行更改,那么外观和感觉就很奇怪。

有什么方法可以设置我父母的边框背景以匹配我的文本块的背景?或者以某种方式从孩子那里触发/更新祖先的背景?

【问题讨论】:

  • 对不起.. 不要在意样式名称的差异.. tbItems 和 sessiontabs 是相同的。
  • 您的TextBlock 是静态的还是您正在从代码隐藏中更改背景?如果您要从后面的代码和TextBlock 一起更改,您也可以更新TabItem 背景。最好的方法是使用TwoWay 绑定将两个控件的背景绑定到某个属性。
  • 好吧...不幸的是,由于一些不可避免的情况,我无法使用代码后面...是否有任何选项可用,没有代码后面?

标签: wpf styles


【解决方案1】:

将标签填充设置为 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 + button.Width)

【讨论】:

  • 但我只能将背景设置为我的文本块 .. 而不是真正的选项卡:(
  • 您可以更改代码并将 Grid 设置为您的文本块的父级吗?如果你能做到,那么你可以设置网格背景
  • 好的,我可以做到。我可以用网格包裹我的文本块,但这会占据整个标签并消除奇怪的外观吗?
  • 不抱歉,我已经编辑了答案。只需将标签填充设置为 0 并将文本块填充设置为 5
  • 是的,这解决了文本块遍布标签的问题.. 但是如果你看到我的截图,我在标签上也有一个 X 来关闭它,它也属于同一边框.现在我的 X 有不同的颜色,标签的所有其他部分都有不同的颜色:) 我 blv 设置背景颜色只是我的选项..
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多