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: Image

0
O Jean 21 avril 2017 à 15:33

3 réponses

Meilleure réponse

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>
1
mm8 21 avril 2017 à 13:01

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>
0
Tarboeuf 21 avril 2017 à 12:49

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

0
Community 23 mai 2017 à 12:02