在.NET 7.0 WPF桌面应用程序中,我有这样的样式,当图像被禁用时,它会将自定义灰度像素着色器应用于图像。该样式在我的App.xaml文件中定义:
<Style TargetType="Image" x:Key="GrayscaleImageStyle">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Effect">
<Setter.Value>
<shaders:GrayscaleEffect Input="{Binding RelativeSource={RelativeSource Self}, Path=Source}"/>
</Setter.Value>
</Setter>
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</Style.Triggers>
</Style>
现在,样式工作得非常好,并且像素着色器正确应用于IsEnabled设置为false的图像。
然而,我注意到在运行时,我在输出调试窗口中得到了一堆错误消息,如下图所示:
System.Windows.Data Error: 40 : BindingExpression path error: 'Source' property not found on 'object' ''GrayscaleEffect' (HashCode=1132111)'. BindingExpression:Path=Source; DataItem='GrayscaleEffect' (HashCode=1132111); target element is 'GrayscaleEffect' (HashCode=1132111); target property is 'Input' (type 'Brush')
我试过一些方法(比如使用ImageSource到Brush转换器(从来没有调用过)或者使用绑定对象)都无济于事。消息仍然很多,正如我提到的,即使效果完美,也意味着绑定需要工作。
任何想法是怎么回事,我如何才能摆脱这些缝合无用的消息?
1条答案
按热度按时间wfypjpf41#
我很困惑,尽管绑定显示我一个错误,但效果仍然有效,我意识到效果的输入必须在内部自动设置,所以我完全删除了绑定。错误消失了!
希望这对其他人有帮助。