2

思い通りに機能するテンプレート化されたツリービューがありますが、階層 1 ノードを「デフォルト」としてマークできるコンテキスト メニューがあります。

ビューモデルのプロパティに反応するデータトリガーがあります。これは、これがデフォルトのノードであることを視覚的に示すためだけにフォントの太さを太字に変更する必要があります。しかし、セッターは何があってもボタンのフォントの太さを変更しません!

ただし、たとえば前景色などの別の値を変更すると、問題なく動作し、フォントサイズも問題ありません。

これはなぜですか、誰か説明できますか?必要に応じて、いくつかのコードを次に示します。

引き金:

<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>
4

1 に答える 1

2

コレクションに aDataTriggerを追加できないため、コードがビルドされていれば驚くでしょう。UIElement.Triggers代わりにa を使用してみてください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" />
于 2013-09-11T16:05:10.853 に答える