2016-06-09 20 views
0

ich eine ListBox haben bekommen, die für jedes Element in meinem Dictionary eine TextBlock schafft und ich brauche ein Click-Ereignis und haben die Möglichkeit zu schaffen, etwas aus dem TextBlock zu bekommen (Tag im Beispiel).Wie Click-Ereignis in TextBlock- innerhalb WPF ListBox erstellen und seinen Tag

Ist das überhaupt möglich? Ich fand viele ähnliche Fragen, aber nichts, was für mich funktionieren würde.

Mein ListBox:

<ListBox x:Name="listbox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Tag="{Binding Path=Key}" 
          Text="{Binding Path=Value.ImieNazwisko}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Antwort

0

Dinge zu vereinfachen, können sagen, Ihr Wörterbuch soetwas wie das ist:

public Dictionary<string,MyItem> MyDictionary { get; set; } 

und Ihr Modell:

public class MyItem 
    { 
     public string ImieNazwisko { get; set; }  
    } 

und stellen Sie die ListBoxItemSource aus dem Code dahinter:

InitializeComponent(); 

    MyDictionary = new Dictionary<string, MyItem>() 
      { 
       {"key1",new MyItem() {ImieNazwisko = "one"} }, 
       {"key2",new MyItem() {ImieNazwisko = "two"} } 
      }; 
    Listbox.ItemsSource = MyDictionary; 

Sie könnten einfach die MouseDown Ereignis behandeln und die Tag Eigenschaft vom Sender abzurufen:

<ListBox x:Name="Listbox" Margin="225,0,0,0" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Tag="{Binding Path=Key}" Text="{Binding Path=Value.ImieNazwisko}" MouseDown="UIElement_OnMouseDown"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

der Handler

private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e) 
    { 
     var tag=(sender as TextBlock).Tag; 
    } 
+0

Dank! Es hat gut funktioniert. OnMouseDown funktioniert etwas besser. – Piteqqq