将ImageSource绑定到ImageBrush时出错

本文关键字:出错 ImageBrush ImageSource 绑定 | 更新日期: 2023-09-27 17:52:15

我有一个名为MyUser的类。它包含一个公共属性"Image",如下所示

private ImageSource _Image;
public ImageSource Image
{
    get { return _Image; }
    set
    {
        if (value != _Image)
        {
            _Image = value;
            OnPropertyChanged("Image");
        }
    }
}

我有一个WPF UserControl,它包含一个setter,用于用该用户的图像填充路径。(User是来自ViewModel的MyUser对象)

<Setter Property="Fill">
    <Setter.Value>
        <ImageBrush ImageSource="{Binding Path=User.Image}"
                    Stretch="UniformToFill" />
    </Setter.Value>
</Setter>

我在运行时得到一个错误(不是一个异常)

System.Windows。数据错误:2:找不到目标元素的框架元素或框架内容元素。BindingExpression:路径= User.Image;DataItem =零;目标元素是ImageBrush (HashCode=21084988);目标属性为'ImageSource'(类型为'ImageSource')

图像显示得非常好。为什么会出现这个错误?这是我该担心的吗?

谢谢你的帮助!莫

将ImageSource绑定到ImageBrush时出错

请阅读类似错误信息的答案。微软表示,这是WPF中的一个小bug,但不值得关注,因为它不会影响运行时行为。

有一次我收到了类似的消息。我的问题是,WPF无法确定一个 FrameworkElement来继承DataContext,它属于可视化树或逻辑树。我把它解释为假设VisualTree中的第一个FrameworkElement。所以我认为这条消息应该是对这种行为的一个提示。

在这些术语中,您应该检查您的容器或usercontrol或您正在使用的任何东西是否属于可视/逻辑树。

否则,您可以尝试通过ElementName=...RelativeSource={RelativeSource FindAncestor, AncestorType=...}显式指定它来确定DataContext。

但是你试过诊断这种绑定吗?使用名称空间xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"并将, diag:PresentationTraceSources.TraceLevel=High添加到绑定中,您应该能够确定那里发生了什么。