wpf 获取实际工作的绑定的运行时错误

gcxthw6b  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(95)

在.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转换器(从来没有调用过)或者使用绑定对象)都无济于事。消息仍然很多,正如我提到的,即使效果完美,也意味着绑定需要工作。
任何想法是怎么回事,我如何才能摆脱这些缝合无用的消息?

wfypjpf4

wfypjpf41#

我很困惑,尽管绑定显示我一个错误,但效果仍然有效,我意识到效果的输入必须在内部自动设置,所以我完全删除了绑定。错误消失了!

<Style TargetType="Image" x:Key="GrayscaleImageStyle">
  <Style.Triggers>
    <Trigger Property="IsEnabled" Value="False">
      <Setter Property="Effect">
        <Setter.Value>
          <shaders:GrayscaleEffect/>
        </Setter.Value>
      </Setter>
      <Setter Property="Opacity" Value="0.5"/>
    </Trigger>
  </Style.Triggers>
</Style>

希望这对其他人有帮助。

相关问题