silverlight user-controls silverlight-2-rc0

Silverlight ImageButton UserControl



user-controls silverlight-2-rc0 (2)

Creo que esto ayudará. ¡Lo hizo por mí!

http://www.nikhilk.net/Silverlight-Effects-In-Depth.aspx

En su lugar, use ImageSource. Tipo de EG (ImageSource), etc.

Estoy comenzando con Silverlight (2 RC0) y parece que no puedo hacer que lo siguiente funcione. Quiero crear un botón de imagen simple para el control del usuario.

Mi xaml para el control del usuario es el siguiente:

<Button> <Button.Template> <ControlTemplate> <Image Source="{TemplateBinding ImageSource}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" /> </ControlTemplate> </Button.Template> </Button>

El código detrás es el siguiente:

public partial class ImageButtonUserControl : UserControl { public ImageButtonUserControl() { InitializeComponent(); } public Image Source { get { return base.GetValue(SourceProperty) as Image; } set { base.SetValue(SourceProperty, value); } } public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("SourceProperty", typeof(Image), typeof(ImageButtonUserControl),null); }

Quiero ser capaz de crear dinámicamente los ImageButtons y rellenarlos en un contenedor como WrapPanel: supongamos que ya tenemos una imagen llamada "imagen":

ImageButtonUserControl imageButton = new ImageButtonUserControl(); imageButton.Source = image; this.thumbnailStackPanel.Children.Add(imageButton);

¿Qué debo hacer para que se muestre la imagen? Supongo que tengo que hacer algo con DataContext, pero no estoy muy seguro de qué o dónde.

Gracias por cualquier ayuda


Puede obtener un ImageButton fácilmente con sólo presionar un botón común para que no requiera un UserControl. Suponiendo que Button.Content será ImageSource. La Plantilla de Control del Botón será:

<ControlTemplate x:Key="btn_template"> <Image Source="{TemplateBinding Content}" /> </ControlTemplate>

Y el uso como ItemsControl con colección de URL como ItemsSource, puede agregar WrapPanel como el Panel de elementos. El valor predeterminado será StackPanel si no especifica uno.

<DataTemplate x:Key="dataTemplate"> <Button Template="{StaticResource btn_template}" Content="{Binding}"/> </DataTemplate> <ItemsControl ItemsSource="{Binding UrlCollection}" ItemsTemplate="{StaticResource dataTemplate}"/>