c# - 更改 WPF TreeView 中按钮的字体粗细

标签 c# wpf mvvm treeview styling

我有一个模板化的 TreeView ,它可以按照我想要的方式工作,但我有一个上下文菜单,允许将第 1 层节点标记为“默认”。

我有一个数据触发器,它对 View 模型中的属性使用react,它应该将字体粗细更改为粗体,以便直观地显示这是默认节点。但无论如何, setter 都不会更改按钮上的字体粗细!

但是,如果我更改另一个值,例如前景色,它就可以正常工作,字体大小也没有问题。

这是为什么,谁能解释一下吗?如果需要的话,这里是一些代码:

触发器:

<HierarchicalDataTemplate ItemsSource="{Binding Children,Mode=TwoWay,NotifyOnSourceUpdated=True}">
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
        <Image x:Name="nodeImg" Source="{Binding Image}" MaxHeight="16" MaxWidth="16"/>
        <Button x:Name="nodeButton" Content="{Binding Name}" Command="{Binding Command}" Style="{StaticResource TreeMenuButton}"/>
    </StackPanel>

    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem},Path=IsExpanded}" Value="True">
            <Setter TargetName="nodeImg" Property="Source" Value="{Binding ImageExpanded}"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding IsDefaultConnection}" Value="True">
            <Setter TargetName="nodeButton" Property="FontWeight" Value="Bold"></Setter>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>

按钮的默认样式:

<Style x:Key="TreeMenuButton" TargetType="{x:Type Button}">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="MinHeight" Value="23" />
    <Setter Property="MinWidth" Value="75" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="Border"
                        CornerRadius="0"
                        BorderThickness="0"
                        Background="Transparent"
                        BorderBrush="Transparent">
                    <ContentPresenter Margin="2"
                                      HorizontalAlignment="Left"
                                      VerticalAlignment="Center"
                                      RecognizesAccessKey="True"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

最佳答案

如果您的代码甚至构建为无法将 DataTrigger 添加到 UIElement.Triggers 集合中,我会感到惊讶。尝试使用 Style (这绝对有效):

<Style>
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsDefault}" Value="True">
            <Setter Property="TextBlock.FontWeight" Value="Bold" />
        </DataTrigger>
    </Style.Triggers>
</Style>

如果奇迹般地您的 DataTemplate 确实UIElement.Triggers 集合中工作,那么请尝试使用类名和属性名称:

<Setter Property="TextBlock.FontWeight" Value="Bold" />

关于c# - 更改 WPF TreeView 中按钮的字体粗细,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745201/

相关文章:

c# - 将 Entity Framework 导航属性映射到ViewModel对象

c# - Rfc2898DeriveBytes 如何验证作为哈希值存储在数据库中的密码

c# - 如何从下拉列表中获取选定的值 C# ASP.NET

c# - 使用 TweetSharp 检索特定主题标签的所有推文

asp.net - 在 Web 项目中包含 PCL 时出现错误 "Could not load file or assembly ' sqlite 3' or one of its dependencies"

c# - 为什么 TreeView 控件不绑定(bind)

c# - 如何将 Visual Studio XAML 验证错误转化为构建错误?

c# - ListView 选择模式无法正常运行

c# - 如何根据按钮点击设置Label的内容

c# - 从模型创建 ViewModel