2010-04-27 12 views
16

Ich möchte ein Benutzersteuerelement erstellen, das ein Bild anzeigt und beim Klicken einen Befehl aufrufen kann. Später möchte ich eine Liste dieser Steuerelemente an eine Liste von Produkten binden.Erstellen eines anklickbaren Bilds in WPF

Antwort

44

Versuchen Sie, diese sehr geradlinig Ansatz

<Grid> 
     <Button Height="50" Width="50"> 
      <Button.Template> 
       <ControlTemplate> 
        <Image Source="yourimage.png"/> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 

    </Grid> 

private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      // do smt 
     } 
+2

Dies war der geradlinigste Ansatz, den ich gesehen habe, ohne alle visuellen Stile für den Button überschreiben zu müssen. – jrandomuser

+1

Ich bin mit diesem Ansatz gegangen, aber die Wiederverwendbarkeit geht aus dem Fenster, da Sie effektiv den Bildnamen hart codieren. Aber es passt zu meinen Bedürfnissen. –

+0

@jrandomuser sehe meine Antwort dann. –

4

Es gibt mehrere Möglichkeiten, dies zu tun, aber eine einfache Lösung wäre, eine Schaltfläche zu verwenden (vielleicht den Rahmen und den Hintergrund zu entfernen) und das Bild als Inhalt der Schaltfläche zu verwenden.

Sie können später eine ListBox o.ä. verwenden und die DataTemplate überschreiben, um die Schaltfläche und ein Bild für jedes Produkt zu verwenden.

+0

Dies ist in der Tat der erste Weg, den ich genommen habe, aber ich frage mich, ob es eine sauberere Lösung gibt. – mico

+0

Siehe meine Antwort unten für Code – mico

8

Nun, nach ein wenig mehr Fummelei, ein einfacher Knopf macht den Job. Hier ist sie:

<Button Command="{Binding Path=DisplayProductCommand}" > 
    <Image Source="..\Images\my-beautiful-product.jpg"/> 
</Button> 
+3

Dies ist kein anklickbares Bild, das ist eine Schaltfläche mit einem Bild darin. Ich bin verblüfft, dass dies als die akzeptierte Antwort markiert ist. [This] (http://stackoverflow.com/a/21597209/161250) sollte die akzeptierte Antwort sein. – Alex

3
<Image Name="imageFoo" Source="/AppFoo;component/Foo.png" Width="32" Cursor="Hand" MouseUp="imageFoo_MouseUp"/> 

    private void imageFoo_MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     //Do something 
    } 
+0

Dies ruft keinen in XAML definierten ICommand auf. – mico

+3

Entschuldigung, Mico, weil ich Ihre Anforderung nicht vollständig verstanden habe. Lass mich meine Antwort dort lassen, für den Fall, dass jemand einen schnellen Weg braucht, um ein anklickbares Bild zu haben. – Hong

1

ich nicht über euch wissen aber PreviewMouseDown und TouchUp arbeitete völlig in Ordnung zusammen mit meiner Bindung:

<Image x:Name="bla" Source="{Binding blabla}" ... TouchDown="bla_TouchDown" PreviewMouseDown="bla_PreviewMouseDown"> 

Ich verwende VS 2015

Verwandte Themen