WPF XAML TreeView.ItemContainerStyle Verständnisfrage



  • <Grid>
            <TreeView HorizontalAlignment="Stretch" Name="myTreeView" VerticalAlignment="Stretch" >
                <TreeView.Resources>
                    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0">
                        <GradientStop Color="#FFD9F4FF" Offset="0"/>
                        <GradientStop Color="#FF9BDDFB" Offset="1"/>
                    </LinearGradientBrush>
                    <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" EndPoint="0,1" StartPoint="0,0">
                        <GradientStop Color="#FFEEEDED" Offset="0"/>
                        <GradientStop Color="#FFDDDDDD" Offset="1"/>
                    </LinearGradientBrush>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
                </TreeView.Resources>
                <TreeView.ItemContainerStyle>
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="BorderThickness" Value="1.5"/>
                        <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="2"/>
                            </Style>
                        </Style.Resources>
                    </Style>
                </TreeView.ItemContainerStyle>
            </TreeView>
        </Grid>
    

    Ich hab diesen Schnipsel in meinen TreeView eingebaut. Er soll damit in etwa die Optik des Visual Studio Trees bekommen: Blaue Hintergrund-Markierung bei den Items (siehe TreeView.Resources) und diese Markierung mit abgerundeten Ecken (siehe TreeView.ItemContainerStyle)
    Die Elemente in meinem TreeView füge ich über den Code ein. Seltsamerweise funktioniert das mit der Formatierung aber nur so halb:
    - Das erste Element hat die richtige Farbe und die abgerundete Markierung
    - Die nachfolgenden Elemente haben die richtige Farbe aber ihnen fehlt die "Abrundung" - Wieso? 😕
    Erst wenn ich im Code an jedes neue Element nochmal explizit den ItemContainerStyle vom Vorgänger zuweise klappt es. Das da oben kann ja wohl kaum so gemeint sein, das es für jedes Element deklariert werden muss?! (die ich ja vorher gar nicht kenne) 😕


Log in to reply