2017-04-21 8 views
0

私はTreeViewItem.Headerに2つのTextblocksを持っています。 だから、このように私の作品かかわら:TreeViewItem.Header内のDockPanelがすべての空白を埋めることはありません

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

しかし、DockPanelはTreeViewItem.Headerで利用可能なすべてのスペースを埋めるしないでください。私はHorizontalAlignment="Stretch"を使用しようとしましたが、これは何の効果もありません。

この作業を行うための属性はありますか?あなたはこのようなスタイルを設定する必要が Image

+0

作品に「ストレッチ」するためには、親要素の幅を持っている必要があります(width = "Auto"にすることはできません)。これは本当ですか? – ltiveron

+0

私はまあまあです。このTreeViewはAuto Height/Widthです。 DockPanelの幅をたとえば260に手動で設定すると、「動作」します。しかし、サイズを変更するときにVisual Bugsを取得します。グリッドにStackPanelを作成するのと同じように、DockPanelが自動的にTreeViewItemの空き領域を埋めるのはなぜですか? –

+0

多分、DockPanelを1つのColumnDefinition Width = "*"のグリッド内に配置することができます。これができるかどうかはわかりませんが、試してみます。 – ltiveron

答えて

1

あなたがTreeViewのヘッダが水平に伸ばしたい場合は、あなたが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

ありがとう。これは私のために理解するのが少し難しいようですが、それは動作します。 私はいつも私のすべての質問の答えが今のように思えます。ニースはそこにいます。 –

0

私はuが問題と良く見ることができる写真を持って

 <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> 
(第2テキストブロックのドッキングを変更することを忘れないでください)
+0

私のために働かない。 –

関連する問題