2017-04-21 24 views
0

我想在我的TreeViewItem.Header中有2個文本塊。 所以我雖然它的工作原理是這樣的: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

爲「拉伸」的工作,父元素寬度必須(它不能有寬度=「自動」)。是這樣嗎? – ltiveron

+0

我猜是的。此TreeView是自動高度/寬度。 如果我手動設置DockPanel的寬度爲例如260.然後它「工作」。但是,當它調整大小時,我會得到Visual Bugs。爲什麼DockPanel不會自動填充TreeViewItem中的可用空間,就像我在Grid中創建一個StackPanel一樣。 –

+0

也許你可以用一個ColumnDefinition Width =「*」把你的DockPanel放入一個Grid中。不知道這是否會做,但我會嘗試。 – ltiveron

回答

1

,你應該重寫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

必須設置這樣的風格: (不要忘記改變第二文本塊的對接)

 <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

不適用於我。 –

相關問題