2016-06-09 5 views
0

У меня есть ListBox, который создает TextBlock для каждого элемента в моей Dictionary, и мне нужно, чтобы создать событие щелчка и иметь возможность получить что-либо от TextBlock (Tag в примере).Как создать событие щелчка в TextBlock внутри WPF ListBox и получить его Tag

Возможно ли это? Я нашел много похожих вопросов, но ничего, что могло бы работать для меня.

Мои ListBox:

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

ответ

0

Для упрощения позволяет сказать, что ваш словарь некоторые вещи, как это:

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

и ваша модель:

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

и установить ListBoxItemSource из кода, приведенного ниже:

InitializeComponent(); 

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

Вы можете просто обрабатывать MouseDown события и получить Tag собственности от отправителя:

<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> 

обработчика

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

Спасибо! Он работал хорошо. OnMouseDown работает немного лучше. – Piteqqq

 Смежные вопросы

  • Нет связанных вопросов^_^