0

TreeView と HierarchiacalDataTemplate を使用する WPF があります。さまざまなレベルのスタイルを設定すると、テキストの前景色が白になることもあれば、黒になることもあります (背景色によって異なります)。これが私のジレンマです。ユーザーがツリービューで項目を選択すると、wpf は境界線を適用し (これは問題ありません)、テキストの前景色を変更します。すでに前景が白のアイテムの場合は問題ありませんが、前景が黒のアイテムの場合、テキストは仮想的に消えます。スタイルがすべてのノードに普遍的に適用されるわけではなく、特定のノードにのみ適用されるため、プロパティ セッターとトリガーを実際に使用することはできません。OnSelectionでWPFが前景色を変更できないようにするにはどうすればよいですか? 以下は私のWPFコードです:

        <TreeView Name="tvwConfig" VerticalAlignment="Stretch" DockPanel.Dock="Left" Width="300" Background="LightGray" ItemsSource="{Binding}" SelectedItemChanged="Treeview_SelectedItemChanged" >
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type cfg:AppConfig}" ItemsSource="{Binding Path=Services}">
                <Border Width="200" BorderBrush="DarkBlue" Background="DarkBlue" BorderThickness="1" CornerRadius="2" Margin="2" Padding="2">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=ServerName}" FontWeight="Bold" Foreground="White" />
                    </StackPanel>
                </Border>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type cfg:Service}" ItemsSource="{Binding Path=Queues}">
                <Border Width="200" BorderBrush="RoyalBlue" Background="RoyalBlue" BorderThickness="1" CornerRadius="2" Margin="2" Padding="2">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="White" />
                        <TextBlock Text=" (" FontWeight="Bold" Foreground="White" />
                        <TextBlock Text="{Binding Path=Modality}" FontWeight="Bold" Foreground="White" />
                        <TextBlock Text=")" FontWeight="Bold" Foreground="White" />
                    </StackPanel>
                </Border>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type cfg:Queue}" ItemsSource="{Binding Path=Statuses}">
                <Border Width="200" BorderBrush="AliceBlue" Background="AliceBlue" BorderThickness="1" CornerRadius="2" Margin="2" Padding="2">
                    <StackPanel Orientation="Horizontal" >
                        <TextBlock Text="{Binding Path=Name}" FontWeight="SemiBold" />
                    </StackPanel>
                </Border>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type cfg:Status}">
                <Border Width="200" BorderBrush="White" Background="White" BorderThickness="1" CornerRadius="2" Margin="2" Padding="2">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Name}" />
                        <TextBlock Text=" ("/>
                        <TextBlock Text="{Binding Path=Weight}" />
                        <TextBlock Text=")" />
                    </StackPanel>
                </Border>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
4

2 に答える 2

0

リソースでこのスタイルを設定します。条件を満たすすべての TreeViewItem に適用されるキーを設定しないでください。サンプルコード:

<Style TargetType="TreeViewItem">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="true">
                    <Setter Property="Foreground" Value="White"/>
                </Trigger>
           </Style.Triggers>
        </Style>
于 2013-11-08T04:07:36.473 に答える