Pregunta

Tengo un control de usuario que expone una propiedad de tipo ImageSource. Quiero exponer esta propiedad en Blend para poder editarla en Blend, en lugar de especificar la imagen en el código.

Según lo que he buscado en Google, he agregado una propiedad de dependencia y he especificado los atributos adecuados para exponer la propiedad en Blend.

Lo puedo ver allí y editarlo (como un campo de texto). Lo que quiero hacer es tener una lista desplegable de recursos de imagen disponibles y un botón de búsqueda para cargar otra imagen. En otras palabras, quiero que se comporte como la propiedad 'Fuente' del control 'Imagen'.

edit Como nota aparte, he notado que la exposición de las propiedades de Alineación o Margen se comporta como se esperaba, parece ser que las Imágenes no funcionan. Estoy realmente atascado en este caso y agradecería ayuda!

Mi código actual se ve como:

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;
    }
}
¿Fue útil?

Solución

He estado trabajando en casi exactamente este problema (menos Blend, además de usar la propiedad en un ControlTemplate en XAML.)

En mi caso, lo he hecho funcionar cambiando ImageSource a BitmapSource . ImageSource es abstracto, BitmapSource amplía ImageSource.

Sin embargo, algo no se siente bien con esto. El tipo de Image.Source es ImageSource. Sea o no abstracto, parece que debería poder usar una propiedad de dependencia de tipo ImageSource.

Entonces, para mi propio caso, lo tengo funcionando con BitmapSource pero todavía estoy investigando.

EDITAR: Esperemos que no te importe una respuesta casi un año después de la pregunta, +/- 12 horas. ;)

EDIT2: George, también conseguí que esto me funcionara con ImageSource usando:

public static readonly DependencyProperty SourceProperty =
    Image.SourceProperty.AddOwner(typeof(MyCustomButton));
public ImageSource Source
{
    get { return (ImageSource)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top