2011-01-09 3 views
5

내 UserControl (true/false)의 IsEnabled 속성에 따라 그 안에 컨트롤의 색이 다릅니다. XAML의 '마법'으로 그렇게하고 싶습니다.자식 컨트롤에 대한 UserControl 속성 트리거

<UserControl.Resources> 
    <Style x:Key="EnableDependent" TargetType="{x:Type Shape}"> 
     <Style.Triggers> 
      <Trigger Property="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True"> 
       <Setter Property="Stroke" Value="White" /> 
      </Trigger> 
      <Trigger Property="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="False"> 
       <Setter Property="Stroke" Value="Black" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

스타일은 경로가 그려집니다 뷰 박스에 적용됩니다

<Viewbox Grid.Column="3" Width="18" Margin="5,5,2,5" MouseEnter="Dispatch_MouseEnter" DockPanel.Dock="Right" Stretch="Uniform"> 
     <Path Data="M0,1 L4,1 M2,0 L4,1 L2,2" Stretch="Fill" StrokeThickness="3" Width="12" Height="12" Style="{StaticResource EnableDependent}" /> 
    </Viewbox> 

나는 바인딩이 트리거의 '속성'속성에서 설정 될 수 없음 런타임 예외를 얻을.

그래서 어떻게해야합니까?

답변

17

Trigger 대신 내부 속성을 변경하는 경우 을 사용하십시오.이 작업을 수행 할 수있는 곳은 Binding입니다.

<Style x:Key="EnableDependent" TargetType="{x:Type Shape}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True"> 
      <Setter Property="Stroke" Value="White" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="False"> 
      <Setter Property="Stroke" Value="Black" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+2

나는 왜 이것이 downvoted .... –

관련 문제