如何将Image的Source绑定到附加属性?

时间:2011-10-02 22:03:32

标签: c# .net wpf

我创建了一个包含Image控件的自定义控件。

我想将图像控件的源绑定到ImageSource依赖属性。

依赖属性创建如下:

public static class ImageSourceProperty
{
    public static readonly DependencyProperty CustomImageSourceProperty;

    public static ImageSource GetCustomImageSource(DependencyObject dependencyObject)
    {
        return (ImageSource)dependencyObject.GetValue(CustomImageSourceProperty);
    }

    public static void SetCustomImageSource(DependencyObject dependencyObject, ImageSource value)
    {
        dependencyObject.SetValue(CustomImageSourceProperty, value);
    }

    static ImageSourceProperty()
    {
        CustomImageSourceProperty = DependencyProperty.RegisterAttached("CustomImageSource", typeof (ImageSource), typeof (ImageSourceProperty), new PropertyMetadata(default(ImageSource)));
    }
}

我正在尝试将自定义控件的图像源绑定为:

<UserControl
(...)
xmlns:AttachedProperties="clr-namespace:Codex.UserControls.AttachedProperties"
x:Class="Codex.UserControls.CustomControls.ImageWithBorder"
d:DesignWidth="640" d:DesignHeight="480">

<Grid x:Name="LayoutRoot">
    <Border BorderBrush="White" BorderThickness="3" CornerRadius="3">
        <Image Source="{Binding AttachedProperties:ImageSourceProperty.CustomImageSource}" Width="50" Height="50"/>
    </Border>
</Grid>

我将用户控件放在我的视图中,如下所示:

<CustomControls:ImageWithBorder (...) AttachedProperties:ImageSourceProperty.CustomImageSource="(...)"/>

启动应用程序时,我在“输出”窗口中收到以下错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'AttachedProperties:ImageSourceProperty' property not found on 'object' ''ToolbarViewModel' (HashCode=20169503)'. 

为什么用户控件无法绑定到依赖项属性?它是否在其代码隐藏中寻找依赖属性而无法找到它?

1 个答案:

答案 0 :(得分:0)

发现问题。我没有指定绑定的相对来源。

这是正确的UserControl声明:

<Image Source="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type CustomControls:ImageWithBorder}},Path=(AttachedProperties:ImageSourceProperty.CustomImageSource), Mode=TwoWay}" Width="50" Height="50"/>

问题是Dependency Property无法返回值,因为依赖项对象无效。