2010-03-23 59 views

回答

0

您可以修改TreeViewItem的標題以在左側添加複選框。下面是一個快速入門的例子,這個xaml只是在左側添加了一個複選框,在右側添加了一個TextBlock。

<TreeView> 
     <TreeViewItem> 
      <TreeViewItem.Header> 
       <WrapPanel> 
        <CheckBox /> 
        <TextBlock 
         Margin='5,0' 
         Text='Item' /> 
       </WrapPanel> 
      </TreeViewItem.Header> 
      <TreeViewItem> 
       <TreeViewItem.Header> 
        <WrapPanel> 
         <CheckBox /> 
         <TextBlock 
          Margin='5,0' 
          Text='SubItem' /> 
        </WrapPanel> 
       </TreeViewItem.Header> 
      </TreeViewItem> 
     </TreeViewItem> 
    </TreeView> 

根據你的情況下,您可能希望創建一個全新的模板來覆蓋默認的外觀爲所有TreeViewItems,如果你這樣做,然後簽出MSDN樹型視圖控件模板例如:

http://msdn.microsoft.com/en-us/library/ms788727.aspx

+0

感謝您的回覆。 我的意思是這樣的情況: ----------------------------- | 的TreeView 列1列2 的CheckBox樹型視圖 的CheckBox樹型視圖 的CheckBox樹型視圖 所有複選框必須在右側的左對齊,樹視圖。 Withou使用LisBox或TreeListView – 2010-03-23 11:58:30

+0

當我使用這個http://msdn.microsoft.com/en-us/library/ms788727.aspx 我有情況左邊的複選框,但沒有對齊列。 – 2010-03-23 13:36:03

+0

無論TreeViewItem的嵌套深度如何,您希望所有複選框都沿着左邊的對齊方式排列在彼此之下。我幾乎可以肯定這是使用ControlTemplate可以實現的,但是我已經仔細研究了一段時間。我會看看我能否找到它併發布一些代碼。 – 2010-03-23 13:57:34

1

Sergo,這是一個使用控制模板的版本,我們在項目的第0列中放置了複選框。它們應該與TreeViewItem向左對齊。 '魔術'部分在CheckboxTreeItem樣式中,我們添加一個WrapPanel並將其放置在Grid.Column ='0'中。

<Window 
    x:Class="TreeViewHeaderTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" 
    Height="300" 
    Width="300"> 
    <Window.Resources> 
     <SolidColorBrush 
      x:Key="GlyphBrush" 
      Color="#444" /> 
     <Style 
      x:Key="ExpandCollapseToggleStyle" 
      TargetType="ToggleButton"> 
      <Setter 
       Property="Focusable" 
       Value="False" /> 
      <Setter 
       Property="Template"> 
       <Setter.Value> 
        <ControlTemplate 
         TargetType="ToggleButton"> 
         <WrapPanel 
          Background="Transparent"> 
          <Path 
           x:Name="ExpandPath" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Center" 
           Margin="1,1,1,1" 
           Fill="{StaticResource GlyphBrush}" 
           Data="M 4 0 L 8 4 L 4 8 Z" /> 
         </WrapPanel> 
         <ControlTemplate.Triggers> 
          <Trigger 
           Property="IsChecked" 
           Value="True"> 
           <Setter 
            Property="Data" 
            TargetName="ExpandPath" 
            Value="M 0 4 L 8 4 L 4 8 Z" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <Style 
      x:Key="TreeViewItemFocusVisual"> 
      <Setter 
       Property="Control.Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border> 
          <Rectangle 
           Margin="0,0,0,0" 
           StrokeThickness="5" 
           Stroke="Black" 
           StrokeDashArray="1 2" 
           Opacity="0" /> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <Style 
      x:Key="CheckboxTreeItem" 
      TargetType="{x:Type TreeViewItem}"> 
      <Setter 
       Property="IsExpanded" 
       Value="{Binding IsExpanded, Mode=TwoWay}" /> 
      <Setter 
       Property="IsSelected" 
       Value="{Binding IsSelected, Mode=TwoWay}" /> 
      <Setter 
       Property="Background" 
       Value="Transparent" /> 
      <Setter 
       Property="HorizontalContentAlignment" 
       Value="{Binding Path=HorizontalContentAlignment, 
       RelativeSource={RelativeSource 
       AncestorType={x:Type ItemsControl}}}" /> 
      <Setter 
       Property="VerticalContentAlignment" 
       Value="{Binding Path=VerticalContentAlignment, 
       RelativeSource={RelativeSource 
       AncestorType={x:Type ItemsControl}}}" /> 
      <Setter 
       Property="Padding" 
       Value="1,0,0,0" /> 
      <Setter 
       Property="Foreground" 
       Value="{StaticResource {x:Static 
       SystemColors.ControlTextBrushKey}}" /> 
      <Setter 
       Property="FocusVisualStyle" 
       Value="{StaticResource TreeViewItemFocusVisual}" /> 
      <Setter 
       Property="Template"> 
       <Setter.Value> 
        <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> 
          <WrapPanel 
           Grid.Column='0'> 
           <CheckBox /> 
           <ToggleButton 
            x:Name="Expander" 
            Style="{StaticResource 
            ExpandCollapseToggleStyle}" 
            IsChecked="{Binding Path=IsExpanded, 
             RelativeSource={RelativeSource 
            TemplatedParent}}" 
            ClickMode="Press" /> 
          </WrapPanel> 
          <Border 
           Name="Bd" 
           Grid.Column="1" 
           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> 
          <Trigger 
           Property="IsExpanded" 
           Value="false"> 
           <Setter 
            TargetName="ItemsHost" 
            Property="Visibility" 
            Value="Collapsed" /> 
          </Trigger> 
          <Trigger 
           Property="HasItems" 
           Value="false"> 
           <Setter 
            TargetName="Expander" 
            Property="Visibility" 
            Value="Hidden" /> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition 
             Property="HasHeader" 
             Value="false" /> 
            <Condition 
             Property="Width" 
             Value="Auto" /> 
           </MultiTrigger.Conditions> 
           <Setter 
            TargetName="PART_Header" 
            Property="MinWidth" 
            Value="75" /> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition 
             Property="HasHeader" 
             Value="false" /> 
            <Condition 
             Property="Height" 
             Value="Auto" /> 
           </MultiTrigger.Conditions> 
           <Setter 
            TargetName="PART_Header" 
            Property="MinHeight" 
            Value="19" /> 
          </MultiTrigger> 
          <Trigger 
           Property="IsSelected" 
           Value="true"> 
           <Setter 
            TargetName="Bd" 
            Property="Background" 
            Value="AliceBlue" /> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition 
             Property="IsSelected" 
             Value="true" /> 
            <Condition 
             Property="IsSelectionActive" 
             Value="false" /> 
           </MultiTrigger.Conditions> 
           <Setter 
            TargetName="Bd" 
            Property="Background" 
            Value="{StaticResource {x:Static 
            SystemColors.ControlBrushKey}}" /> 
           <Setter 
            Property="Foreground" 
            Value="{StaticResource {x:Static 
            SystemColors.ControlTextBrushKey}}" /> 
          </MultiTrigger> 
          <Trigger 
           Property="IsEnabled" 
           Value="false"> 
           <Setter 
            Property="Foreground" 
            Value="{StaticResource {x:Static 
            SystemColors.GrayTextBrushKey}}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <TreeView> 
     <TreeViewItem 
      Style='{StaticResource CheckboxTreeItem}' 
      Header='Item' 
      IsExpanded='True'> 
      <TreeViewItem 
       Style='{StaticResource CheckboxTreeItem}' 
       Header='SubItem 1' /> 
      <TreeViewItem 
       Style='{StaticResource CheckboxTreeItem}' 
       Header='SubItem 2'> 
       <TreeViewItem 
        Style='{StaticResource CheckboxTreeItem}' 
        Header='SubItem a' /> 
       <TreeViewItem 
        Style='{StaticResource CheckboxTreeItem}' 
        Header='SubItem b' /> 
      </TreeViewItem> 
     </TreeViewItem> 
    </TreeView> 
</Window> 
+0

非常感謝,例如。你明白我的意思。現在我們有根元素Header ='Item' 並且在複選框附近 - 這很好,但是下一個項目Header ='SubItem 1'有偏移量 - 也沒關係。但是Header ='SubItem 1'的複選框必須保持在複選框的根目錄下,而不是偏移量。 – 2010-03-23 14:50:57

+0

你可以給我修改版嗎? – 2010-03-23 15:30:17

+0

如果你想TreeViewItems縮進,但所有的複選框都會左移(不管它們的縮進),那麼你可能需要添加一些方法來知道你的嵌套層次。我不確定如何在Xaml中完成這項工作。 – 2010-03-23 15:31:34