c# - 在与 WPF 样式上的 setter 属性不同的类型上使用触发器属性

标签 c# wpf

当窗口本身的依赖属性为 false 时,我希望将主窗口上一组图像的不透明度设置为 0.25,并在依赖属性为 true 时恢复它们。我尝试为此使用样式触发器,但当依赖属性与不透明度属性的类型不同时遇到困难。

    <Window.Resources>
        <Style x:Key="IconEnabledStyle" TargetType="Image">
            <Style.Triggers>
                <!-- MenuOptionsEnabled is on main window. Opacity is on Image -->
                <Trigger Property="MenuOptionsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.25"></Setter>
                </Trigger>
                <Trigger Property="MenuOptionsEnabled" Value="True">
                    <Setter Property="Opacity" Value="1.0"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

正如您所看到的,Trigger 属性与 Setter 属性的类型不同。有没有办法定义 Trigger 和 Setter 属性的类型。

最佳答案

要解决这个问题,您可以使用 DataTriggerRelativeSource 来查找祖先 Window,如下所示:

<Style x:Key="IconEnabledStyle" TargetType="Image">
    <Style.Triggers>    
       <DataTrigger Binding="{Binding MenuOptionsEnabled, 
                    RelativeSource={RelativeSource AncestorType=Window}}" 
                    Value="False">
          <Setter Property="Opacity" Value="0.25"></Setter>
       </DataTrigger>
    </Style.Triggers>
</Style>

请注意,默认的不透明度已经是1。因此您不需要任何触发器即可将其重置为1。当满足条件时,设置为0.25,否则会自动重置为之前的值。

关于c# - 在与 WPF 样式上的 setter 属性不同的类型上使用触发器属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509134/

相关文章:

c# - 如何在 SharePoint 2013 中使用 REST API 将附件文件附加到列表项

c# WPF 在特殊参数启动时防止闪屏(图像 -> buildaction -> Splashscreen)

c# - MVVM 处理 MouseDragElementBehavior 的拖动事件

c# - 在 WPF 中绑定(bind)两个依赖属性

c# - 如何在 Wpf-app 中使用 9-patch 图像

c# - 使用 Task.Delay() 的循环是否会造成内存泄漏?

c# - 将字符串转换为有效的 MS SQL 日期时间以用于在数据库中进行搜索

c# - 在 Azure Web Apps 上更改时区不适用于 DateTimeOffset.Now?

C# WPF - GridLength GridUnitType.Auto

c# - 如何改进 WPF 倒数计时器的时间格式