2008-10-14 11 views
6

Estoy empezando con Silverlight (2 RC0) y parece que no funciona lo siguiente. Quiero crear un botón de imagen simple para el control del usuario.Silverlight ImageButton UserControl

Mi xaml para el control de 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 subyacente 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 las cosas en una contenedor como un 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

Respuesta

10

Usted puede obtener una ImageButton fácilmente con sólo un botón de templating ordinaria por lo que no requieren un control de usuario en absoluto. Suponiendo que Button.Content será ImageSource. El ControlTemplate del botón será:

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

Y el uso como un ItemsControl con la colección de URL como su ItemsSource, puede agregar WrapPanel como el ItemPanel. 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}"/> 
+0

Gracias, eso fue un error tipográfico que ya había solucionado ... todavía no parece funcionar. – ckarbass

+0

hmm ... ya tiene ancho y alto, creo que tiene que ver con DataContext ... – ckarbass

+0

ese uso dará como resultado un botón con una imagen dentro de él. Quiero una imagen en la que se pueda hacer clic (sin el botón predeterminado que la encapsula visualmente) ... Creo que el código que he descrito anteriormente anula por completo la plantilla de botón predeterminada con la imagen. – ckarbass