2011-01-09 5 views
5

В зависимости от свойства IsEnabled моего UserControl (true/false), я хочу, чтобы элементы управления внутри него имели разные цвета. Я хочу сделать это с помощью «магии» 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, где нарисован путь:

<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

Использовать DataTrigger вместо обычного Trigger, который предназначен для внутренних изменений свойств, у него есть Binding -Property, где вы можете это сделать.

<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

Интересно, почему это было приостановлено .... –

Смежные вопросы

 Смежные вопросы