[英]WPF DataTrigger with OpacityMask
我正在使用Mahapps.Metro並希望根據屬性更改圖標。
只設置矩形的Backgroundcolor(“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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.