Question

Est-il possible de réutiliser simple expansion [+] et l'effondrement des boutons de [-] qui apparaissent à côté des nœuds dans un TreeView WPF? Je voudrais avoir un graphique similaire ailleurs dans mon application pour développer et réduire certains contrôles.

Était-ce utile?

La solution

Il est en fait un ToggleButton, j'ai vérifié le modèle de TreeView sur le SimpleStyles projet et ce que je trouve:

    <ControlTemplate TargetType="ToggleButton">
      <Grid
        Width="15"
        Height="13"
        Background="Transparent">
        <Path x:Name="ExpandPath"
          HorizontalAlignment="Left" 
          VerticalAlignment="Center" 
          Margin="1,1,1,1"
          Fill="{StaticResource GlyphBrush}"
          Data="M 4 0 L 8 4 L 4 8 Z"/>
      </Grid>
      <ControlTemplate.Triggers>
        <Trigger Property="IsChecked"
             Value="True">
          <Setter Property="Data"
              TargetName="ExpandPath"
              Value="M 0 4 L 8 4 L 4 8 Z"/>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>

Voici ce que vous devez faire pour le faire fonctionner:

<Window x:Class="StackOverflowTests.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" x:Name="window1" Height="300" Width="300"
 Loaded="window1_Loaded"
 xmlns:local="clr-namespace:StackOverflowTests">
 <Window.Resources>
  <SolidColorBrush x:Key="GlyphBrush" Color="#444" />
  <ControlTemplate x:Key="toggleButtonTemplate" TargetType="ToggleButton">
   <Grid
            Width="15"
            Height="13"
            Background="Transparent">
    <Path x:Name="ExpandPath"
              HorizontalAlignment="Left" 
              VerticalAlignment="Center" 
              Margin="1,1,1,1"
              Fill="{StaticResource GlyphBrush}"
              Data="M 4 0 L 8 4 L 4 8 Z"/>
   </Grid>
   <ControlTemplate.Triggers>
    <Trigger Property="IsChecked"
                 Value="True">
     <Setter Property="Data"
                  TargetName="ExpandPath"
                  Value="M 0 4 L 8 4 L 4 8 Z"/>
    </Trigger>
   </ControlTemplate.Triggers>
  </ControlTemplate>
  <Style x:Key="toggleButtonStyle" TargetType="ToggleButton">
   <Setter Property="Template" Value="{StaticResource toggleButtonTemplate}" />
  </Style>
 </Window.Resources>
 <StackPanel>
  <ToggleButton x:Name="toggleButton" Height="20" Width="20" Style="{StaticResource toggleButtonStyle}" />
 </StackPanel>
</Window>
  • D'abord, vous prenez le modèle (toggleButtonTemplate) et mettez-le dans vos ressources
  • Ensuite, vous faites un style (toggleButtonStyle) qui définit le modèle (toggleButtonTemplate) du contrôle
  • Enfin, vous dites à votre ToggleButton son style est toggleButtonStyle

Si vous venez de copier coller de l'extérieur vers elle devrait directement le travail.

Il est un processus simple, mais il peut vous donner un mal de tête si vous n'êtes pas habitué à l'aide de modèles, laissez-moi savoir si vous avez des questions.

Pour en savoir un peu plus sur les chemins de mini-langue:

mini-langage Géométrie

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top