Je veux avoir 2 blocs de texte dans mon TreeViewItem.Header
. Donc je pensais que cela fonctionnait comme ceci:
<TreeViewItem>
<TreeViewItem.Header>
<DockPanel LastChildFill="False" HorizontalAlignment="Stretch">
<TextBlock Text="Pizza" DockPanel.Dock="Left"/>
<TextBlock Text="5,00 €" DockPanel.Dock="Right"/>
</DockPanel>
</TreeViewItem.Header>
</TreeViewItem>
Mais le DockPanel ne remplit pas tout l'espace disponible dans TreeViewItem.Header
. J'ai essayé d'utiliser HorizontalAlignment="Stretch"
, mais cela n'a aucun effet.
Y a-t-il un attribut pour que cela fonctionne?
J'ai une photo où peux-tu mieux voir le problème:
3 réponses
Si vous voulez que l'en-tête d'un TreeView
s'étire horizontalement, vous devez remplacer le ControlTemplate
:
<TreeViewItem HorizontalContentAlignment="Stretch">
<TreeViewItem.Template>
<ControlTemplate 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" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" />
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="2" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" 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>
<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.InactiveSelectionHighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</TreeViewItem.Template>
<TreeViewItem.Header>
<DockPanel LastChildFill="False">
<TextBlock Text="Pizza" DockPanel.Dock="Left"/>
<TextBlock Text="5,00 €" DockPanel.Dock="Right"/>
</DockPanel>
</TreeViewItem.Header>
</TreeViewItem>
Vous devez définir un style comme celui-ci: (n'oubliez pas de modifier l'ancrage du deuxième bloc de texte)
<TreeViewItem>
<TreeViewItem.Style>
<Style TargetType="TreeViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</TreeViewItem.Style>
<TreeViewItem.Header>
<DockPanel LastChildFill="False" HorizontalAlignment="Stretch">
<TextBlock Text="Pizza" DockPanel.Dock="Left"/>
<TextBlock Text="5,00 €" DockPanel.Dock="Left"/>
</DockPanel>
</TreeViewItem.Header>
</TreeViewItem>
Il semble que le seul moyen soit de changer le modèle de contrôle de TreeviewItem. Voir cette question: TreeViewItem.Header avec grille à l'intérieur
De nouvelles questions
wpf
Windows Presentation Foundation, ou WPF, est un sous-système de rendu des interfaces utilisateur dans les applications Windows.