2010-05-03 2 views
0

J'ai plusieurs commandes d'extension avec un contrôle ViewTree dans chaque contrôle d'extension. Lorsque je sélectionne un ViewTreeItem d'un ViewTree puis sélectionne un autre ViewTreeItem d'un autre ViewTree, le ViewTreeItem nouvellement sélectionné est surligné en bleu foncé, mais le dernier élément sélectionné est maintenant surligné en bleu clair. S'il vous plaît regardez www.zunjaa.com/public/images/screen.jpg pour voir de quoi je parle. Comment est-ce que je fais en sorte que l'élément actif ne montre plus le bleu plus clair?WPF TreeViewItem élément désélectionné encore légèrement en surbrillance

Merci.

Répondre

0

Ceci est causé par un déclencheur dans le modèle par défaut pour TreeViewItem:

<MultiTrigger> 
    <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="true"/> 
     <Condition Property="IsSelectionActive" Value="false"/> 
    </MultiTrigger.Conditions> 
    <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
</MultiTrigger> 

La suppression de ce modèle par défaut du thème Aero laisse:

<PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z"/> 
<Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="Focusable" Value="False"/> 
    <Setter Property="Width" Value="16"/> 
    <Setter Property="Height" Value="16"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Border Width="16" Height="16" Background="Transparent" Padding="5,5,5,5"> 
        <Path x:Name="ExpandPath" Fill="Transparent" Stroke="#FF989898" Data="{StaticResource TreeArrow}"> 
         <Path.RenderTransform> 
          <RotateTransform Angle="135" CenterX="3" CenterY="3"/> 
         </Path.RenderTransform> 
        </Path> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF1BBBFA"/> 
         <Setter Property="Fill" TargetName="ExpandPath" Value="Transparent"/> 
        </Trigger> 
        <Trigger Property="IsChecked" Value="True"> 
         <Setter Property="RenderTransform" TargetName="ExpandPath"> 
          <Setter.Value> 
           <RotateTransform Angle="180" CenterX="3" CenterY="3"/> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Fill" TargetName="ExpandPath" Value="#FF595959"/> 
         <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF262626"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type TreeViewItem}"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="19" Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <ToggleButton x:Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"/> 
     <Border x:Name="Bd" SnapsToDevicePixels="true" Grid.Column="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
      <ContentPresenter x:Name="PART_Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" ContentSource="Header"/> 
     </Border> 
     <ItemsPresenter x:Name="ItemsHost" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"/> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsExpanded" Value="false"> 
      <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/> 
     </Trigger> 
     <Trigger Property="HasItems" Value="false"> 
      <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/> 
     </Trigger> 
     <Trigger Property="IsSelected" Value="true"> 
      <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="false"> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

Salut John, Merci pour votre réponse. Je ne connais pas trop WPF. Pouvez-vous me dire où je peux trouver le modèle par défaut afin que je puisse le modifier? –

+0

Le moyen le plus rapide de copier le modèle actuel est généralement de cliquer avec le bouton droit de la souris et de Modifier le modèle-> Modifier une copie dans le mélange. Pour utiliser ce qui précède pour tous TreeViewItems dans une fenêtre, ajoutez le code ci-dessus dans Window.Resources suivi de:

0

merci pour l'aide. C'est ce que j'ai fini avec et ça marche pour moi:

<Window.Resources> 
<Style TargetType="TreeViewItem"> 
    <Style.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
    </Style.Resources> 
    <Style.Triggers> 
    <MultiTrigger> 
     <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="true"/> 
     <Condition Property="IsSelectionActive" Value="false"/> 
     </MultiTrigger.Conditions> 
     <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
    </MultiTrigger> 
    </Style.Triggers> 
</Style> 
</Window.Resources> 
Questions connexes