0

丸みを帯びた境界線とすべてのツリービュー項目の背景を持つツリービュー コントロールをセットアップしようとしています。ただし、 x:Static SystemColors.HighlightBrushKey も線形グラデーションでオーバーライドしました。

ただし、これを行っているときに、ツリービュー項目に背景を設定すると、ハイライトブラシキーが適用されないことに気付きました。これを達成する方法を教えてください。

以下は私のコードです:

    <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">      

    <Page.Resources>  

        <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FFFFEF" Offset="0"/>
                <GradientStop Color="#FFF7D3" Offset="0.2580"/>
                <GradientStop Color="#FFEFB2" Offset="0.3870"/>
                <GradientStop Color="#FFEFB2" Offset="1"/>
            </LinearGradientBrush>

 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="TreeViewItemBackground">
            <GradientStop Color="#FFFAFFFF" Offset="0"/>
            <GradientStop Color="#FFFAFAFA" Offset="0.2580"/>
            <GradientStop Color="#FFF7F7F7" Offset="0.3870"/>
            <GradientStop Color="#FFF4F4F4" Offset="1"/>
        </LinearGradientBrush>

            <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFF8F8F8" Offset="0"/>
                <GradientStop Color="#FFE5E5E5" Offset="1"/>
            </LinearGradientBrush>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />        
            <TreeView x:Name="GroupView" ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" MinWidth="150"  Margin="3">
                        <TreeView.Resources>
                            <HierarchicalDataTemplate DataType="{x:Type GridSplitterTextTrim:Group}" ItemsSource="{Binding Items}">                                       
                                        <Border BorderBrush="#FFEAEEE8"   BorderThickness="1" CornerRadius="3" Margin="-1" Background="{StaticResource TreeViewItemBackground}" >
                                            <StackPanel Orientation="Horizontal"  Background="Transparent" Margin="1">
                                                <TextBlock Text="{Binding Path=Name}" TextTrimming="WordEllipsis" Margin="3" MaxWidth="150"  Width="{Binding ActualWidth, ElementName=GroupView, Converter={StaticResource TreeViewWidthConverter}}" ToolTip="{Binding Name}" />
                                            </StackPanel>
                                        </Border>                                           
                                </HierarchicalDataTemplate>
                            <DataTemplate DataType="{x:Type GridSplitterTextTrim:Entry}" >
                                <Border BorderBrush="#C0C0C0" BorderThickness="1" CornerRadius="3" Margin="-1">
                                    <StackPanel Orientation="Horizontal" Background="Transparent" Margin="1">
                                        <TextBlock Text="{Binding Path=Name}" TextTrimming="WordEllipsis" Margin="3" MaxWidth="132"  Width="{Binding ActualWidth, ElementName=GroupView, Converter={StaticResource TreeViewWidthConverter}}" ToolTip="{Binding Name}" />
                                    </StackPanel>
                                </Border>
                            </DataTemplate>
                        </TreeView.Resources>
                        <TreeView.ItemContainerStyle>
                            <Style TargetType="{x:Type TreeViewItem}">
                                <Setter Property="BorderThickness" Value="1"/>
                                <Setter Property="Margin" Value="2"/>
                                <Style.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                       <!-- <Setter Property="BorderBrush" Value="#adc6e5"/>-->                                       
                                        </Trigger>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="IsSelected" Value="True"/>
                                            <Condition Property="IsSelectionActive" Value="False"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="BorderBrush" Value="LightGray"/>
                                    </MultiTrigger>
                                </Style.Triggers>
                                <Style.Resources>
                                    <Style TargetType="Border">
                                        <Setter Property="CornerRadius" Value="3"/>                                      
                                    </Style>
                                </Style.Resources>
                            </Style>
                        </TreeView.ItemContainerStyle>
                    </TreeView>
     </Page.Resources>  
    </Page>  

いくつかの注意事項:

  • コンバーターを使用してテキストブロックの幅を設定します。これは、テキストのトリミングを実現するためです。

  • この投稿のために、データ テンプレートの 1 つを背景色なしで設定しましたが、最初のテンプレートで背景を設定すると、ハイライト ブラシでハイライトされません。

前もって感謝します、-マイク

4

1 に答える 1

1

あなたはDataTemplate's背景がコンテナの選択の上に描かれています。これが、選択色を非表示にしている理由です。アイテムが選択されたときに背景をクリアするためにを追加できDataTriggerます。DataTemplate

<DataTemplate>
    <Border x:Name="bg" Background="Red">
     ...
    </Border>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" 
                     Value="True">
            <Setter TargetName="bg" Property="Background" Value="{x:Null}" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
于 2013-01-10T19:00:25.770 に答える