2012-04-11 11 views
1

Ich habe folgende treeview in meiner XAML definiert:WPF-Stil löst auf einem TreeView aus?

 <TreeView Name="PST_TreeView" 
       Grid.Row="0" 
       Grid.Column="0" 
       Width="Auto" 
       Height="Auto" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       ItemsSource="{Binding SitesCollection}" 
       ItemTemplate="{StaticResource SitesTemplate}" 
       Style="{StaticResource TreeViewStyleBasic}" /> 

Mit Ressourcenbindungen meiner Ressourcen-Targeting-Datei:

<Style x:Key="TreeViewStyleBasic" TargetType="TreeView"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="BorderBrush" Value="{DynamicResource TitleBarButtons_BorderBrush}" /> 
    <Setter Property="BorderThickness" Value="0 0 2 0" /> 
</Style> 

<Style x:Key="TreeViewItemStyle_CatNodes" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="Snow" /> 
    <Setter Property="FontFamily" Value="Calibri" /> 
    <Setter Property="FontSize" Value="16" /> 
    <Setter Property="FontWeight" Value="Normal" /> 
    <Setter Property="TextAlignment" Value="Left" /> 
</Style> 

<Style x:Key="TreeViewItemStyle_ChildNodes" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="Snow" /> 
    <Setter Property="FontFamily" Value="Calibri" /> 
    <Setter Property="FontSize" Value="14" /> 
    <Setter Property="FontWeight" Value="Normal" /> 
    <Setter Property="FontStyle" Value="Italic" /> 
    <Setter Property="TextAlignment" Value="Left" /> 
</Style> 

<DataTemplate x:Key="VolumeInfoDataTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Width="{TemplateBinding Width}" 
        Height="{TemplateBinding Height}" 
        Margin="5" 
        Style="{DynamicResource TreeViewItemStyle_ChildNodes}" 
        Text="{Binding VolumeName}" /> 
    </StackPanel> 
</DataTemplate> 

<HierarchicalDataTemplate x:Key="SitesTemplate" 
          ItemsSource="{Binding VolumesList}" 
          ItemTemplate="{StaticResource VolumeInfoDataTemplate}"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Width="{TemplateBinding Width}" 
        Height="{TemplateBinding Height}" 
        Margin="5" 
        Style="{DynamicResource TreeViewItemStyle_CatNodes}" 
        Text="{Binding SiteName}" /> 
    </StackPanel> 
</HierarchicalDataTemplate> 

XAML und Ressourcen Look-Ups über Arbeit finden und wie erwartet.

Wie kann ich Auslöser verwenden, um meine Stildefinitionen zu erweitern, um zum Beispiel das 'IsSelected' Ereignis zu behandeln, so dass der ausgewählte Baumknoten eine schiefergraue Grenze und einen hellgrauen Hintergrund hat?

RESEARCH: Kind of thing I am going for.

UPDATE: Es gibt keine IsSelected Eigenschaft auf dem TreeView jedoch TreeViewItem nicht hat ein definiert.

Antwort

0

Try this:

<DataTemplate x:Key="VolumeInfoDataTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Width="{TemplateBinding Width}" 
         Height="{TemplateBinding Height}" 
         Margin="5" 
         Style="{DynamicResource TreeViewItemStyle_ChildNodes}" 
         Text="{Binding VolumeName}" 
         Name="Tb" /> 
     </StackPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" Value="True"> 
        <Setter TargetName="Tb" Property="Background" Value="LightGray"/> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
+0

ich es geschafft, etwas anderes aus den obigen Link eingefügt zu arbeiten, aber ich bin neugierig, liegen an der Relative Markup-Erweiterung ... können Sie bitte etwas mehr über erklären, was das ist tun? – IbrarMumtaz

+0

Standardmäßig ist eine Bindung relativ zum DataContext des Controls. Mit RelativeSource können Sie ein anderes Objekt angeben. In diesem Beispiel sucht die Bindung nach dem ersten Elternelement vom Typ TreeViewItem und überprüft dessen IsSelected-Eigenschaft. http://msdn.microsoft.com/en-us/library/ms743599.aspx –

Verwandte Themen