Réutilisant Expand TreeView [+] et l'effondrement [-] boutons WPF
-
19-09-2019 - |
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.
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: