Question

J'ai un contrôle utilisateur qui expose une propriété de type ImageSource. Je souhaite exposer cette propriété dans Blend afin de pouvoir la modifier dans Blend, plutôt que de spécifier l'image dans le code.

Sur la base de ce que j'ai cherché sur Google, j'ai ajouté une propriété de dépendance et spécifié les attributs appropriés pour exposer la propriété dans Blend.

Je peux le voir là-bas et le modifier (en tant que champ de texte). Ce que je veux faire, c'est avoir une liste déroulante des ressources d'images disponibles et un bouton Parcourir pour charger une autre image. En d'autres termes, je souhaite qu'il se comporte comme la propriété "Source" du contrôle "Image".

modifier À titre d’aspect particulier, j’ai remarqué que le fait d’exposer les propriétés Alignment ou Margin se comporte comme prévu, il semble tout simplement que les images ne fonctionnent pas. Je suis vraiment coincé sur celui-ci et j'apprécierais de l'aide!

Mon code actuel ressemble à:

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;
    }
}
Était-ce utile?

La solution

J'ai travaillé presque exactement sur ce problème (moins Blend, plus l'utilisation de la propriété dans un ControlTemplate dans XAML.)

Dans mon cas, je l’ai obtenu en remplaçant ImageSource par BitmapSource . ImageSource est abstrait, BitmapSource étend ImageSource.

Cependant, quelque chose ne va pas. Le type de Image.Source est ImageSource. Que ce soit abstrait ou non, il me semble que je devrais pouvoir utiliser un DependencyProperty de type ImageSource.

Donc, dans mon cas, je l’ai utilisé avec BitmapSource mais je suis toujours en train d’enquêter.

EDIT: Espérons que cela ne vous dérange pas de répondre environ un an après votre demande, +/- 12 heures. ;)

EDIT2: George, cela a également fonctionné pour moi avec ImageSource en utilisant:

public static readonly DependencyProperty SourceProperty =
    Image.SourceProperty.AddOwner(typeof(MyCustomButton));
public ImageSource Source
{
    get { return (ImageSource)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top