我创建了一个包含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)'.
为什么用户控件无法绑定到依赖项属性?它是否在其代码隐藏中寻找依赖属性而无法找到它?
答案 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无法返回值,因为依赖项对象无效。