c# - 带有 OpacityMask 的 WPF DataTrigger

标签 c# wpf mahapps.metro visualbrush opacitymask

我正在使用 Mahapps.Metro 并希望根据属性更改图标。

Here is the Mahapps sample for their Icons

仅设置矩形的背景颜色(“填充”),一切正常。一旦设置了 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>

有什么想法我做错了吗?

最佳答案

经过很长时间,我找到了一个适合我的解决方案:

  • 第一个问题是缺少使用的资源 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>

关于c# - 带有 OpacityMask 的 WPF DataTrigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28637973/

相关文章:

c# - 在解决方案资源管理器中隐藏类 View

c# - .NET 拼写检查控件?

WPF 绑定(bind)开销

c# - WPF 自定义控件 DependencyProperty 不会进行数据绑定(bind)

wpf - MahApps - 如何禁用默认按钮的自动大写

c# - 在 Asp.Net Web API 中将 JSON 反序列化为派生类型

c# - 为什么在 Excel 中比较 1<' 或将任何数字与带有 < 的任何文本进行比较结果为真?

c# - 如何实例化复杂的控件组并访问它们的值? (wpf 与 Visual Studio )

c# - 如何在主窗口外使用 ShowProgressAsync 进度条?

c# - 将 MahApps.Metro 样式应用于 NavigationWindow