2016-06-02 2 views
0

바운드 속성을 기반으로 TextBox의 배경을 설정하는 DataTrigger가 있습니다.
다음은 XAML의 간소화 된 버전이다 : I가 IsDirty 사용 속성 값을 표시하는 TextBlock에 추가DataTrigger in HierarchicalDataTemplate의 스타일이 잘못되었습니다. TreeView

<TreeView > 
<TreeViewItem Header="Things" > 
    <TreeViewItem.Resources> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsDirty}" Value="True"> 
        <Setter Property="Background" Value="LightGray" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
     <HierarchicalDataTemplate DataType="{x:Type local:Type1}" ItemsSource="{Binding Children, Mode=OneWay}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" Margin="6,0,6,0" /> 
       <TextBlock Text="{Binding IsDirty}" Margin="6,0,6,0" /> 
       <i:Interaction.Behaviors> 
        <dragDrop:FrameworkElementDropBehavior DragEffect="Move" /> 
       </i:Interaction.Behaviors> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
    </TreeViewItem.Resources> 
</TreeViewItem> 

; 그것이 사실 일 때, 배경은 변함없이 남아 있습니다.
스타일을 HierarchicalDataTemplate.Resources로 이동하려고 시도했지만 아무런 차이가 없습니다.
무엇이 내려다 보입니까?
감사합니다 -

들이 해당 템플릿의 범위 내에서 정의하지 않는 한 암시 적 스타일 템플릿 내부에 적용되지 않습니다 즉 템플릿 경계 교차하지 않는 Control에서 파생되지 유형을 대상으로하기 때문이다

답변

1

. Here's a good post이 어떻게 작동하는지 설명하고 왜 이런 방식으로 작동하는지 설명합니다.

템플릿 경계를 넘기 위해서는 TextBlock 대신 Control (예 : Label)에서 파생 된 유형을 사용해야하며 그 유형을 타겟팅하는 암시 적 스타일을 정의해야합니다.

그렇지 않으면, 당신은 템플릿의 자원을 사전에 이동하여 문제가되는 템플릿의 범위에 스타일을 넣어 수 :

<HierarchicalDataTemplate (...)> 
    <HierarchicalDataTemplate.Resources> 
     <Style TargetType="{x:Type TextBlock}"> 
      (...) 
     </Style> 
    </HierarchicalDataTemplate.Resources> 
    (...) 
</HierarchicalDataTemplate> 
+0

감사합니다! 나는 HDT에 스타일을 넣으려고 시도했다고 생각했다. 자료들, 그러나 나는 다른 곳에 그것들을 넣어야 만한다 ... 유용한 링크. – Number8