1

我想建立具有以下特點一個TreeView:WPF:樹視圖 - 按鈕有條件配售擴大子項目

  1. 第一級應該有不上離開,但右側的擴展按鈕
  2. 所有子級別應該有左側的擴展按鈕 - 就像默認的TreeViewItem
  3. 展開/摺疊應該動畫就像擴展控制

我MES使用DataTemplate和HierarchicalDataTemplate進行演唱,但擴展按鈕似乎不是模板的一部分,它始終添加到模板中,並始終位於左側。 如何根據項目級別放置擴展器按鈕?

回答

1

您必須通過更改ToggleButton列來自定義TreeViewItem ControlTemplate。然後,您可以在樣式中使用DataTrigger更改控件模板。

<Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}"> 
    <!-- snip --> 
    <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 Grid.Column="1" x:Name="Expander" 
       Style="{StaticResource ExpandCollapseToggleStyle}" 
       IsChecked="{Binding Path=IsExpanded, 
          RelativeSource={RelativeSource TemplatedParent}}" 
       ClickMode="Press"/> 
     <Border Name="Bd" 
      Grid.Column="0" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      Padding="{TemplateBinding Padding}"> 
     <ContentPresenter x:Name="PART_Header" 
        ContentSource="Header" 
        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
     </Border> 
     <ItemsPresenter x:Name="ItemsHost" 
       Grid.Row="1" 
       Grid.Column="1" 
       Grid.ColumnSpan="2"/> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <!-- snip --> 
    </ControlTemplate.Triggers> 
    </ControlTemplate> 
</Style> 
+0

謝謝。多數民衆贊成我是如何嘗試它。但問題是,子項目(進入ItemsPresenter的),然後確實也有右側的擴展按鈕... – user1130329 2013-02-15 07:51:19

+0

只需在綁定到對象的level屬性的datatrigger中設置模板 – mathieu 2013-02-15 07:52:38

+0

您的意思是我應該在數據觸發器內切換CONTROLtemplate? – user1130329 2013-02-15 08:05:06