Blendで使用するためにUserControlでImageSourceプロパティを公開する
-
03-07-2019 - |
質問
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;
}
}
解決
この問題にほぼ正確に取り組んでいます(Blendを差し引いて、XAMLのControlTemplateでプロパティを使用しています)。
私の場合、 ImageSource
を BitmapSource
に変更することで動作するようになりました。 ImageSourceは抽象的で、BitmapSourceはImageSourceを拡張します。
しかし、これについて何かが正しくないと感じています。 Image.SourceのタイプはImageSourceです。抽象であるかどうかにかかわらず、ImageSource型のDependencyPropertyを使用できるはずです。
したがって、私自身の場合、 BitmapSource
で動作するようになっていますが、まだ調査中です。
編集:願わくば、質問のほぼ1年後、+ /-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); }
}