Domanda

Ho un controllo utente che espone una proprietà di tipo ImageSource. Voglio esporre questa proprietà in Blend in modo da poterla modificare in Blend, anziché specificare l'immagine nel codice.

In base a ciò che ho cercato su Google, ho aggiunto una proprietà di dipendenza e ho specificato gli attributi appropriati per esporre la proprietà in Blend.

Posso vederlo lì e modificarlo (come un campo di testo). Quello che voglio fare è avere un elenco a discesa delle risorse immagine disponibili e un pulsante Sfoglia per caricare un'altra immagine. In altre parole, voglio che si comporti come la proprietà 'Source' del controllo 'Image'.

modifica A parte questo, ho notato che l'esposizione delle proprietà Allineamento o Margine si comporta come previsto, sembra che siano le Immagini a non funzionare. Sono davvero bloccato su questo e apprezzerei l'aiuto!

Il mio codice attuale è simile a:

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;
    }
}
È stato utile?

Soluzione

Ho lavorato quasi esattamente su questo problema (meno Blend, oltre a utilizzare la proprietà in un ControlTemplate in XAML.)

Nel mio caso l'ho fatto funzionare cambiando ImageSource in BitmapSource . ImageSource è astratto, BitmapSource estende ImageSource.

Tuttavia, qualcosa non sembra giusto al riguardo. Il tipo di Image.Source è ImageSource. Indipendentemente dal fatto che sia astratto, sembra che dovrei essere in grado di utilizzare una proprietà di dipendenza di tipo ImageSource.

Quindi, per il mio caso, ho funzionato con BitmapSource ma sto ancora indagando.

MODIFICA: Spero non ti dispiaccia una risposta quasi un anno dopo aver chiesto, +/- 12 ore. ;)

EDIT2: George, ho anche fatto in modo che funzioni per me con ImageSource utilizzando:

public static readonly DependencyProperty SourceProperty =
    Image.SourceProperty.AddOwner(typeof(MyCustomButton));
public ImageSource Source
{
    get { return (ImageSource)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top