2010-03-23 3 views

답변

0

TreeViewItem의 머리글을 수정하여 왼쪽에 확인란을 추가 할 수 있습니다. 다음은 빠른 시작 예제입니다.이 xaml은 왼쪽에 체크 박스를 추가하고 오른쪽에는 TextBlock을 추가합니다.

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

+0

답장을 보내 주셔서 감사합니다. 이런 상황을 의미합니다. ----------------------------- | 트 리뷰 열 1 열 2 의 CheckBox TreeViewItem 의 CheckBox TreeViewItem 의 CheckBox TreeViewItem 모든 체크 박스 오른쪽 왼쪽 정렬 트 리뷰해야한다. Withouy LisBox 또는 TreeListView를 사용하여 –

+0

내가 이것을 사용할 때 http://msdn.microsoft.com/en-us/library/ms788727.aspx 왼쪽에 확인란이 있지만 열에 정렬되지 않은 경우 상황이 있습니다. –

+0

원하는 것은 TreeViewItem의 중첩 깊이에 관계없이 모든 확인란이 왼쪽 아래에 나란히 정렬되도록하는 것입니다. 나는 이것이 ControlTemplate을 사용하여 수행 할 수 있다는 것을 거의 확신하고 있지만, 검토 한 지 오래되었습니다. 내가 그것을 찾아서 코드를 게시 할 수 있는지 알게 될 것이다. –

1
:

<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 TreeViewItem 컨트롤 템플릿의 예를 체크 아웃 할 수 있습니다 시나리오에 따라

Sergo, 여기에 제어 템플릿을 사용하는 버전이 있으며 항목의 열 0에 확인란이 있습니다. 오른쪽에있는 TreeViewItem을 사용하여 왼쪽에 정렬해야합니다. '마법'조각은 WrapPanel을 추가하고 Grid.Column = '0'에 배치하는 CheckboxTreeItem 스타일에 있습니다.

<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'의 체크 박스는 체크 박스 루트 아래에 있어야하며 오프셋이 없어야합니다. –

+0

수정 된 버전을 알려주시겠습니까? –

+0

TreeViewItems 들여 쓰기를 원하지만 모든 체크 박스가 들여 쓰기 되더라도 왼쪽으로 플러시되도록하려면 중첩 수준을 알기위한 몇 가지 방법을 추가해야 할 수 있습니다. Xaml만으로는이 작업을 수행하는 방법을 잘 모르겠습니다. –

관련 문제