【发布时间】:2013-09-11 15:23:02
【问题描述】:
我有一个模板化的树视图,可以按我的意愿工作,但我有一个上下文菜单,允许将第 1 层节点标记为“默认”。
我有一个数据触发器,它对视图模型中的一个属性做出反应,它应该将字体粗体更改为粗体,以直观地显示这是默认节点。但是setter无论如何都不会改变按钮上的fontweight!
但是,如果我更改另一个值,例如前景色,它可以正常工作,字体大小也没有问题。
这是为什么,谁能解释一下?如果需要,这里是一些代码:
触发器:
<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>
【问题讨论】:
-
您在按钮中使用的字体是否具有
bold样式,如果是,它在您当前显示的大小上是否在视觉上有所不同? -
是的,问题是我在设计器中有不同的数据上下文和模型数据,我实际上可以看到它在设计器中正常工作。我什至可以更改 fontfamily/weight 等,但是一旦我运行它,它就不起作用了
标签: c# wpf mvvm treeview styling