在UserControl中公开ImageSource属性以在Blend中使用

时间:2009-01-07 03:47:35

标签: wpf user-controls expression-blend dependency-properties

我有一个用户控件,它公开了ImageSource类型的属性。我想在Blend中公开这个属性,以便我可以在Blend中编辑它,而不是在代码中指定图像。

根据我用Google搜索的内容,我添加了一个依赖项属性,并指定了适当的属性来公开Blend中的属性。

我可以在那里看到它并编辑它(作为文本字段)。我想要做的是有一个可用图像资源的下拉列表,以及一个用于加载另一个图像的浏览按钮。换句话说,我希望它的行为类似于'Image'控件的'Source'属性。

编辑顺便说一句,我注意到曝光Alignment或Margin属性的行为与预期的一样,它似乎只是不起作用的图像。我真的被这个坚持了,我会很感激帮助!

我目前的代码如下:

public static readonly DependencyProperty ImageSourceProperty =
        DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(SmartButton));

[Category("Appearance")]
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ImageSource ImageSource
{
    get { return (ImageSource)GetValue(ImageSourceProperty); }
    set
    {
        SetValue(ImageSourceProperty, value);
        this.BackgroundImage.Source = value;
    }
}

1 个答案:

答案 0 :(得分:1)

我一直在研究这个问题(减去Blend,再加上在XAML中使用ControlTemplate中的属性。)

就我而言,我已将ImageSource更改为BitmapSource。 ImageSource是抽象的,BitmapSource扩展了ImageSource。

然而,有些事情对此并不正确。 Image.Source的类型是ImageSource。无论它是否是抽象的,似乎我应该能够使用ImageSource类型的DependencyProperty。

所以,就我个人而言,我已经与BitmapSource合作了,但我还在调查。

编辑:希望你提出差不多一年的回答,+ / - 12小时。 ;)

EDIT2:乔治,我确实使用ImageSource使用以下内容为我工作:

public static readonly DependencyProperty SourceProperty =
    Image.SourceProperty.AddOwner(typeof(MyCustomButton));
public ImageSource Source
{
    get { return (ImageSource)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}