使用control自由的property作为trigger
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<
ToggleButton
Width
="30"
Height
="30"
>
< ToggleButton.Style >
< Style TargetType ="ToggleButton" >
< Style.Triggers >
< Trigger Property ="IsChecked" Value ="true" >
< Setter Property ="Content" >
< Setter.Value >
< Border BorderThickness ="1" BorderBrush ="Blue" >
< Image Source ="LimitChecked.ico" />
</ Border >
</ Setter.Value >
</ Setter >
</ Trigger >
< Trigger Property ="IsChecked" Value ="false" >
< Setter Property ="Content" >
< Setter.Value >
< Image Source ="LimitUnChecked.ico" />
</ Setter.Value >
</ Setter >
</ Trigger >
</ Style.Triggers >
</ Style >
</ ToggleButton.Style >
</ ToggleButton >
< ToggleButton.Style >
< Style TargetType ="ToggleButton" >
< Style.Triggers >
< Trigger Property ="IsChecked" Value ="true" >
< Setter Property ="Content" >
< Setter.Value >
< Border BorderThickness ="1" BorderBrush ="Blue" >
< Image Source ="LimitChecked.ico" />
</ Border >
</ Setter.Value >
</ Setter >
</ Trigger >
< Trigger Property ="IsChecked" Value ="false" >
< Setter Property ="Content" >
< Setter.Value >
< Image Source ="LimitUnChecked.ico" />
</ Setter.Value >
</ Setter >
</ Trigger >
</ Style.Triggers >
</ Style >
</ ToggleButton.Style >
</ ToggleButton >
-
使用其他control的property作为trigger
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<
StackPanel
HorizontalAlignment
="Center"
VerticalAlignment
="Center"
>
< CheckBox x:Name ="theCB" Content ="Enable the TextBox" />
< TextBox > <!-- can NOT set 'IsEnabled' property in this line anymore, that will overwrite the style -->
< TextBox.Style >
< Style TargetType ="TextBox" >
< Style.Triggers >
< DataTrigger Binding =" {Binding ElementName=theCB, Path=IsChecked} " Value ="True" >
< Setter Property ="IsEnabled" Value ="True" />
</ DataTrigger >
< DataTrigger Binding =" {Binding ElementName=theCB, Path=IsChecked} " Value ="False" >
< Setter Property ="IsEnabled" Value ="False" />
</ DataTrigger >
</ Style.Triggers >
</ Style >
</ TextBox.Style >
</ TextBox >
</ StackPanel >
< CheckBox x:Name ="theCB" Content ="Enable the TextBox" />
< TextBox > <!-- can NOT set 'IsEnabled' property in this line anymore, that will overwrite the style -->
< TextBox.Style >
< Style TargetType ="TextBox" >
< Style.Triggers >
< DataTrigger Binding =" {Binding ElementName=theCB, Path=IsChecked} " Value ="True" >
< Setter Property ="IsEnabled" Value ="True" />
</ DataTrigger >
< DataTrigger Binding =" {Binding ElementName=theCB, Path=IsChecked} " Value ="False" >
< Setter Property ="IsEnabled" Value ="False" />
</ DataTrigger >
</ Style.Triggers >
</ Style >
</ TextBox.Style >
</ TextBox >
</ StackPanel >
-
使用ViewModel中的property作为trigger
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<
StackPanel
HorizontalAlignment
="Center"
VerticalAlignment
="Center"
>
< CheckBox IsChecked =" {Binding IsRed} " Content ="IsRed" />
< TextBlock >
< TextBlock.Style >
< Style > <!-- is not specify target type -->
< Style.Triggers >
< DataTrigger Binding =" {Binding Path=IsRed} " Value ="True" >
< Setter Property ="TextBlock.Background" Value ="Red" /> <!-- then, need prefixed with 'TextBlocl.' which is the target type -->
</ DataTrigger >
< DataTrigger Binding =" {Binding Path=IsRed} " Value ="False" >
< Setter Property ="TextBlock.Background" Value ="Black" />
</ DataTrigger >
</ Style.Triggers >
</ Style >
</ TextBlock.Style >
</ TextBlock >
</ StackPanel >
< CheckBox IsChecked =" {Binding IsRed} " Content ="IsRed" />
< TextBlock >
< TextBlock.Style >
< Style > <!-- is not specify target type -->
< Style.Triggers >
< DataTrigger Binding =" {Binding Path=IsRed} " Value ="True" >
< Setter Property ="TextBlock.Background" Value ="Red" /> <!-- then, need prefixed with 'TextBlocl.' which is the target type -->
</ DataTrigger >
< DataTrigger Binding =" {Binding Path=IsRed} " Value ="False" >
< Setter Property ="TextBlock.Background" Value ="Black" />
</ DataTrigger >
</ Style.Triggers >
</ Style >
</ TextBlock.Style >
</ TextBlock >
</ StackPanel >
-
tbd...