我正在尝试创建WPF UserControl
。在我的控制中,我想将Image
Source
绑定到我对象的Source
属性。这就是我到目前为止所拥有的:
XAML文件:
<UserControl x:Class="DeletableObjectPresenter.DeletableObjectPresenter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300">
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Source="{Binding Source}"></Image>
</Grid>
</UserControl>
代码:
public ImageSource Source {
get {
return (ImageSource) GetValue(SourceProperty);
}
set {
SetValue(SourceProperty, value);
}
}
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(ImageSource), typeof(DeletableObjectPresenter), new PropertyMetadata(new BitmapImage(
new Uri("pack://application:,,,/DeletableObjectPresenter;component/Resources/StandartView.png",
UriKind.Absolute))));
当我运行项目时,我看不到预期的图像。我做错了什么?
答案 0 :(得分:1)
您必须设置绑定的源对象,这是UserControl本身。
<Image Source="{Binding Source,
RelativeSource={RelativeSource AncestorType=UserControl}}"/>
不要将UserControl的DataContext
设置为自身,因为这会在常见的绑定方案中使用UserControl变得复杂,它会从其父控件继承DataContext:
<local:DeletableObjectPresenter Source"{Binding SomeImage}"/>
这里,SomeImage
是UserControl的继承DataContext中的一个属性,如果您之前已经显式设置了DataContext,则该属性不会那么容易访问。
另请注意,无需在包URI上设置UriKind
:
new BitmapImage(new Uri(
"pack://application:,,,/DeletableObjectPresenter;component/Resources/StandartView.png"));
答案 1 :(得分:0)
您尚未设置DataContext
的{{1}}属性。添加
UserControl
到你的DataContext = {Binding RelativeSource = {RelativeSource Self}}
属性。