【问题标题】:WPF: Binding in TabItem headerWPF:在 TabItem 标头中绑定
【发布时间】:2013-12-10 10:20:11
【问题描述】:

当 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时,如何添加提到“*”的样式?

感谢您的回复

【问题讨论】:

    标签: c# wpf tabitem


    【解决方案1】:

    在标题上使用 Text="*" 创建一个 TextBlock。

    然后将其可见性与 IsModified 属性和 booleanToVisibility 转换器绑定

    编辑: 绑定可见性

    Visibility="{Binding IsModified, Converter={StaticResource booleanToVisibilityConverter}}"
    

    在你的资源文件中

    <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter"/>
    

    EDIT2:不知道您是否需要此信息,但仅用于案例。 HeaderTemplate 的一种方法

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

    【讨论】:

    • 这是一个很好的建议...愿意向用户展示如何做到这一点?
    • 嗯,这是一个线索,所以 OP 可以找到答案,我认为可见性的绑定应该是:Visibility="{Binding IsModified, Converter={StaticResource booleanToVisibilityConverter}}"
    • 着眼大局……不仅仅是这个用户正在寻找这个问题的答案。此外,您的回答越有帮助,您从 StackOverflow 社区获得的声誉就越高。
    • 你是对的。下次我会在开头写完整的答案。我是 wpf 的新手,我不想以错误的方式回答。希望我的版本是正确的。
    • javi 我已经尝试过了,但它不起作用。我意识到问题出在哪里,所以现在我正在重构我的代码......无论如何,你的建议是正确的。
    猜你喜欢
    • 2011-11-02
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2018-04-21
    • 2013-08-04
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多