2012-09-10 3 views
1

(VS 2010 사용) WPF를 처음 사용하고 두 이미지를 표시 한 다음 일부 텍스트를 표시하는 TreeViewItem을 만들려고합니다. 이렇게하려면 StackPanel을 사용하고 있습니다. 나는 첫 번째 이미지는 속성을 모델 변경에 따라/숨기기를 보여주고 싶은, 그래서 0으로 폭을 설정하는 트리거를 추가 :StackPanel 항목 숨기기 -> 나머지 항목 위치 조정

<TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 

       <StackPanel Orientation="Horizontal" Margin="2" SnapsToDevicePixels="True" Width="Auto"> 
        <Image Width="16" Height="16"> 
         <Image.Style> 
          <Style TargetType="{x:Type Image}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding LinkType}" Value="Co"> 
             <Setter Property="Source" Value="/Images/Image1.png"/> 
            </DataTrigger> 
            <DataTrigger Binding="{Binding LinkType}" Value="Post"> 
             <Setter Property="Width" Value="0"/> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </Image.Style> 
        </Image> 

        <Image Source="/Images/Image2.png" 
         Width="15" 
         Height="15" 
         SnapsToDevicePixels="True" Margin="3,0"/> 
        <TextBlock Text="{Binding Name}" Margin="5,0" /> 
       </StackPanel> 



      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 

이 실제로 이미지를 숨길 않지만, 빈 갭 - 잎 스택 패널의 나머지 항목은 첫 번째 이미지의 "제거"를 설명하기 위해 왼쪽으로 밀리지 않습니다. 동일한 결과로 Visibility를 트리거하려고했습니다.

StackPanel에서 항목을 추가/제거하거나 표시/숨기기 또는 너비를 변경하는 등의 방법으로 나머지 항목이 위치를 다시 조정할 수 있습니까? 아니면 거기에 stackpanel보다 나은 컨테이너가 무엇입니까?

+0

+1 잘 질문하십시오. – JDB

답변

1

예. TreeView를 사용하는 경우 TreeView의 직접 "자식"은 실제로 Image 컨트롤이 아닙니다. Image 컨트롤은 TreeViewItem 컨트롤 안에 있습니다. 이것들은 자동적으로 생성되어 TreeView가 TreeView 자식에 필요한 프로퍼티/기능을 구현하도록 모든 컨트롤을 강제하지 않고보다 직관적 인 방법으로 그 자식을 처리 할 수있게합니다.

이러한 TeeViewItem을 쉽게 사용자 정의 할 수 있습니다. TreeView.ItemContainerStyle을 다음과 같이 설정하면 이미지와 동일한 DataContext를 공유 할 수 있습니다.

<TreeView> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding LinkType}" Value="Post"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 
+0

고마워요. 트릭을 한'Collapsed'에'Visibility'를 설정했습니다. 전에는 여전히 공백을 남겨두고있는'Hidden'을 시도했습니다. – Tekito