2017-11-27 1 views
-1

내 wpf 응용 프로그램에서 트리보기를 구현했습니다. 그것은 데이터를 잘 표시하지만, 이제 선택한 트리 뷰 항목 주위에 테두리가 나타나길 원합니다. 그래서 경계 컨트롤 안에 텍스트 블록 컨트롤이있는 트리 뷰 헤더 컨테이너를 지정했습니다. 테두리가 올바르게 표시되지만 트리보기 항목의 속성 인 IsSelected에 따라 색이 변경되지 않습니다.TreeViewItem의 IsSelected 속성에 대한 트리거가 xaml에서 작동하지 않습니다?

<Style TargetType="TreeViewItem" x:Key="StyleTreeViewItemContainer"> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
      <Setter Property="Background" Value="White"></Setter> 
</Style> 
<TreeView Grid.Row="3" x:Name="TreeViewServer" Panel.ZIndex="0" ItemContainerStyle="{StaticResource StyleTreeViewItemContainer}"> 
        <TreeView.Resources> 
         <Style TargetType="TreeViewItem"> 
          <Style.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="BorderBrush" Value="Green"/> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
         <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" DataType="{x:Type ViewModels:ServerTreeViewItemModel}"> 
          <TreeViewItem AllowDrop="{Binding AllowDrop}" Margin="{StaticResource MarginTreeViewItem}" HorizontalContentAlignment="Left" PreviewMouseDown="TreeViewItemServer_PreviewMouseDown" HorizontalAlignment="Left" FontSize="{StaticResource MediumFontSize}" Drop="TreeViewItem_Drop" > 
           <TreeViewItem.Header> 
            <Border BorderBrush="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" BorderThickness="1"> 
             <TextBlock Text="{Binding Path=Text}"></TextBlock> 
            </Border> 
           </TreeViewItem.Header> 
          </TreeViewItem> 
         </HierarchicalDataTemplate> 
      </TreeView.Resources> 
    </TreeView> 
+2

에 TreeView.Resources의 암시 적 스타일은 아마 무시 추가하는 StyleTreeViewItemContainerItemContainerStyle의 기반 : 여기 내가 사용하는 XAML입니다 ItemContainerStyle. – Clemens

답변

1

시도 대신에 당신이 명시 적으로 설정 때문에이 암시 Style<TreeView.Resources>:

<TreeView Grid.Row="3" x:Name="TreeViewServer" Panel.ZIndex="0"> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem" BasedOn="{StaticResource StyleTreeViewItemContainer}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="BorderBrush" Value="Green"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TreeView.ItemContainerStyle> 
    <TreeView.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
     <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" DataType="{x:Type ViewModels:ServerTreeViewItemModel}"> 
      <TreeViewItem AllowDrop="{Binding AllowDrop}" Margin="{StaticResource MarginTreeViewItem}" HorizontalContentAlignment="Left" PreviewMouseDown="TreeViewItemServer_PreviewMouseDown" HorizontalAlignment="Left" FontSize="{StaticResource MediumFontSize}" Drop="TreeViewItem_Drop" > 
       <TreeViewItem.Header> 
        <Border BorderBrush="{Binding Background, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" BorderThickness="1"> 
         <TextBlock Text="{Binding Path=Text}"></TextBlock> 
        </Border> 
       </TreeViewItem.Header> 
      </TreeViewItem> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 
+0

선택 항목에 대해 작업 중입니다. 그러나 선택 해제 된 항목에 대해서는 테두리가 제거되지 않습니다. IsSelected가 false로 설정된 경우 트리거에 대한 코드도 추가되었습니다. 그러나 호출되지 않습니다. –

+0

@VK'와 같이 선택 해제 한 후에 사라지게하려면'BorderBrush'에 대한 기본 설정기를 만들어야합니다. – sTrenat

+0

@ mm8 처음에는 테두리가 보이지 않습니다. 보더가 나타나는 노드. 그러나 다른 노드를 선택하면 이전에 선택한 노드의 경계가 사라지지 않습니다. –

관련 문제