带有 OpacityMask 的 WPF DataTrigger
WPF DataTrigger with OpacityMask
我正在使用 Mahapps.Metro 并想根据 属性 更改图标。
Here is the Mahapps sample for their Icons
仅设置矩形的背景颜色("Fill") 一切正常。一旦设置了 OpacityMask,整个矩形就会保持空白。
<Rectangle Width="20" Height="20">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="True">
<Setter Property="Fill" Value="Green" />
<Setter Property="OpacityMask">
<Setter.Value>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_disconnect}" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
<Setter Property="Fill" Value="Red" />
<Setter Property="OpacityMask">
<Setter.Value>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_connect}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
知道我做错了什么吗?
经过很长一段时间我找到了适合我的解决方案:
第一个问题是缺少使用的Ressource BlackBrush
Icons.xaml
里面
技巧是替换整个矩形。我为这项工作使用了 ContentControl
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="True">
<Setter Property="Content" >
<Setter.Value>
<Rectangle Fill="Green" Width="20" Height="20">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black" />
</Rectangle.Resources>
<Rectangle.OpacityMask>
<VisualBrush Visual="{StaticResource appbar_disconnect}" Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
<Setter Property="Content" >
<Setter.Value>
<Rectangle Fill="Red" Width="20" Height="20">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black" />
</Rectangle.Resources>
<Rectangle.OpacityMask>
<VisualBrush Visual="{StaticResource appbar_connect}" Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
我正在使用 Mahapps.Metro 并想根据 属性 更改图标。
Here is the Mahapps sample for their Icons
仅设置矩形的背景颜色("Fill") 一切正常。一旦设置了 OpacityMask,整个矩形就会保持空白。
<Rectangle Width="20" Height="20">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="True">
<Setter Property="Fill" Value="Green" />
<Setter Property="OpacityMask">
<Setter.Value>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_disconnect}" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
<Setter Property="Fill" Value="Red" />
<Setter Property="OpacityMask">
<Setter.Value>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_connect}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
知道我做错了什么吗?
经过很长一段时间我找到了适合我的解决方案:
第一个问题是缺少使用的Ressource BlackBrush Icons.xaml
里面
技巧是替换整个矩形。我为这项工作使用了 ContentControl
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="True">
<Setter Property="Content" >
<Setter.Value>
<Rectangle Fill="Green" Width="20" Height="20">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black" />
</Rectangle.Resources>
<Rectangle.OpacityMask>
<VisualBrush Visual="{StaticResource appbar_disconnect}" Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsOnline}" Value="False">
<Setter Property="Content" >
<Setter.Value>
<Rectangle Fill="Red" Width="20" Height="20">
<Rectangle.Resources>
<SolidColorBrush x:Key="BlackBrush" Color="Black" />
</Rectangle.Resources>
<Rectangle.OpacityMask>
<VisualBrush Visual="{StaticResource appbar_connect}" Stretch="Fill" />
</Rectangle.OpacityMask>
</Rectangle>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>