WPF:在TabItem标题中绑定

4

当TabItem的内容(绑定数据)被修改时,我希望在选项卡标题中显示“*”(星号)。 我的TabItem样式如下:

<TabControl.Resources>
    <Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border Name="_border" 
                                Margin="0,0,0,0" 
                                Padding="0 0 5 0" 
                                Background="Transparent" 
                                BorderBrush="Black" 
                                BorderThickness="0,0,0,0" 
                                CornerRadius="1">
                            <StackPanel Orientation="Horizontal" Margin="10 2 0 2">
                                <TextBlock Foreground="Black" Name="_header">
                                    <ContentPresenter VerticalAlignment="Center" 
                                                      HorizontalAlignment="Center"
                                                      ContentSource="Header" 
                                                      RecognizesAccessKey="True">
                                    </ContentPresenter>
                                </TextBlock>
                                <Button Name="_close"
                                        Visibility="Hidden"
                                        Style="{StaticResource _closeButtonStyle}" 
                                        CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}"
                                        Click="CloseTab_Click"
                                        BorderThickness="0"
                                        Margin="10 0 0 0"
                                        Width="16"
                                        Height="16">
                                    <Image Source="Images/delete_icon16_white.png"
                                           Width="10"
                                           Height="10"
                                           Cursor="Hand"/>
                                </Button>
                            </StackPanel>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="_header" Property="Foreground" Value="White"/>
                            <Setter TargetName="_close" Property="Visibility" Value="Visible"/>
                            <Setter TargetName="_border" Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsMouseOver" Value="True"/>
                                <Condition Property="IsSelected" Value="False"/>
                            </MultiTrigger.Conditions>
                            <Setter TargetName="_header" Property="Foreground" Value="White"/>
                            <Setter TargetName="_close" Property="Visibility" Value="Visible"/>
                            <Setter TargetName="_border" Property="Background">
                                <Setter.Value>
                                    <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.MenuHighlightColorKey}}"/>
                                </Setter.Value>
                            </Setter>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</TabControl.Resources>

当绑定数据的属性IsModified设置为true时,如何添加到此样式中提到的“*”?谢谢回复。
1个回答

1
在头部创建一个TextBlock,其Text值为“*”。 然后使用IsModified属性和booleanToVisibility转换器绑定它的可见性。 编辑: 绑定可见性。
Visibility="{Binding IsModified, Converter={StaticResource booleanToVisibilityConverter}}"

并且在您的资源文件中

<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter"/>

编辑2:不知道你是否需要这些信息,但为了以防万一,提供一个关于HeaderTemplate的方法。

<Setter Property="HeaderTemplate">
    <Setter.Value>
      <DataTemplate>
        <StackPanel>
          <TextBlock Text="{Binding Content}" />
          <TextBlock Text="*" Visibility="{Binding IsModified, Converter={StaticResource booleanToVisibilityConverter}}"/>
        </StackPanel>
      </DataTemplate>
    </Setter.Value>


3
好的建议...您能演示一下用户如何做吗? - Sheridan
这是一个提示,以便OP能够找到答案。我认为可见性的绑定应该是:Visibility="{Binding IsModified, Converter={StaticResource booleanToVisibilityConverter}}" - javi
1
考虑更大的画面……不仅仅是这个用户会寻找问题的答案。此外,你的回答越有帮助,你将从StackOverflow社区获得越多的声誉。 - Sheridan
你是对的。下次我会在开头写完整的答案。我在wpf方面还很新,不想以错误的方式回答。希望我的修改是正确的。 - javi
我已经尝试过这个,但它没有起作用。我意识到问题出在哪里,所以现在我正在重构我的代码...无论如何,你的建议是正确的。 - Patrik Polakovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接