首页 文章

在WPF树视图中更改按钮上的字体粗细

提问于
浏览
1

我有一个模板化的树视图,正如我想要的那样工作,但我有一个上下文菜单,允许将第1层节点标记为“默认” .

我有一个datatrigger响应viewmodel中的属性,它应该将fontweight更改为粗体,以便直观地显示这是默认节点 . 但是无论如何,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>

1 回答

  • 2

    我'd be surprised if your code even built as you can' t将 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" />
    

相关问题