Предоставление свойства ImageSource в UserControl для использования в Blend - PullRequest
0 голосов
/ 07 января 2009

У меня есть пользовательский элемент управления, который предоставляет свойство типа ImageSource. Я хочу показать это свойство в Blend, чтобы можно было редактировать его в Blend, а не указывать изображение в коде.

Исходя из того, что я прогуглил, я добавил свойство зависимости и указал соответствующие атрибуты для предоставления свойства в Blend.

Я могу видеть его там и редактировать (как текстовое поле). Я хочу иметь выпадающий список доступных ресурсов изображений и кнопку просмотра для загрузки другого изображения. Другими словами, я хочу, чтобы он вел себя как свойство «Источник» элемента управления «Изображение».

edit Кроме того, я заметил, что показ свойств 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 Ответ

1 голос
/ 07 января 2010

Я почти точно работал над этой проблемой (за исключением Blend, плюс использование свойства в ControlTemplate в XAML.)

В моем случае я заставил его работать, изменив ImageSource на BitmapSource. ImageSource абстрактный, BitmapSource расширяет ImageSource.

Однако что-то не так в этом. Тип Image.Source - ImageSource. Независимо от того, является ли он абстрактным, кажется, что я должен иметь возможность использовать свойство DependencyProperty типа ImageSource.

Итак, для моего собственного случая у меня это работает с 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); }
}
...