2008-10-14 5 views
6

Ich beginne gerade mit Silverlight (2 RC0) und scheint nicht zu funktionieren. Ich möchte eine einfache Bildschaltfläche erstellen.Silverlight ImageButton UserControl

Meine XAML für die Benutzersteuerung ist wie folgt:

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

Der Code hinter sich wie folgt:

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); 
    } 

ich dynamisch in der Lage sein wollen, um die ImageButtons zu erstellen und stopfen sie in ein Behälter wie ein WrapPanel: Angenommen, wir haben ein Bild „Bild“ genannt schon:

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

Was muss ich tun, damit das Bild angezeigt wird? Ich gehe davon aus, dass ich etwas mit DataContext machen muss, aber ich bin mir nicht sicher, was oder wo.

Vielen Dank für jede Hilfe

Antwort

10

Sie eine Image einfach nur durch Templating einen gewöhnlichen Knopf so dass Sie kann sich auch alle Usercontrol nicht erforderlich. Angenommen, Button.Content ist die ImageSource. Die Control des Button wird:

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

Und die Nutzung als Itemscontrol mit URL-Sammlung als Itemssource, Sie können WrapPanel als ItemPanel hinzufügen. Der Standardwert ist StackPanel, wenn Sie keinen angeben.

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


<ItemsControl ItemsSource="{Binding UrlCollection}" ItemsTemplate="{StaticResource dataTemplate}"/> 
+0

Danke, das war ein Tippfehler, den ich bereits behoben hatte .... scheint immer noch nicht zu funktionieren. – ckarbass

+0

hmm ... es hat bereits eine Breite und Höhe, ich denke, es hat mit DataContext ... – ckarbass

+0

zu tun, dass die Verwendung zu einer Schaltfläche mit einem Bild in ihm führen wird. Ich möchte ein anklickbares Bild (ohne die Standardschaltfläche, die es optisch einkapselt) .... Ich glaube, der Code, den ich oben habe, überschreibt vollständig die Standardschaltflächenvorlage mit dem Bild. – ckarbass