В программировании WPF у меня возникла проблема написать обработчик события нажатия кнопки. Поскольку кнопка находится внутри элемента списка (часть таблицы данных), и когда кнопка нажата, я не могу определить, к какому элементу принадлежит. Есть ли решение? SOS - -Как идентифицировать нажатую кнопку принадлежит к элементу списка?
ответ
ListBox.selectedItem и listbox.SelectedIndex будет установлен как часть нажатия кнопки.
Предполагая, что элементы в списке есть говорят типа MyListBoxItem
void SomeButtonClick(Object sender, EventArgs e)
{
ListBox lb = sender as ListBox
if (lb != null)
{
MyListBoxItem item = lb.SelectedItem As MyListBoxItem;
if (item != Null)
{
item.MethodRelatedToButton(); // maybe
}
}
}
Усиленный по запросу
Извините, я не понимаю ваши слова? можете ли вы объяснить более подробно? –
Он имел в виду, что Listbox, в котором был нажат один из ваших детей, также получает свойство SelectedIndex и SelectedItem из-за нажатия на дочерний элемент. Вы можете использовать эти свойства, чтобы увидеть, какой элемент был нажат. – dowhilefor
кажется, что вы связали поле со списком в коллекцию, и ваши кнопки являются частью вашего данных Шаблон шаблона или элемента.
Вы можете связать Tag
свойство кнопки к объекту данных:
<DataTemplate DataType="{x:Type c:Person}">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock>Name:</TextBlock>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
<Button Click="Button_Click" Tag="{Binding Path=.}">Click me!</Button>
</StackPanel>
</DataTemplate>
и событие Click:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
Person p = (Person)b.Tag;
MessageBox.Show(p.Name);
}
Но, как и другие люди полагают, вы можете использовать DataContext
свойство объекта Кнопка. Он уже указывает на объект Person
в моем примере.
Я думаю, что, используя свойство Tag
, у вас есть больше контроля над тем, к чему вы хотите получить доступ в обработчике событий.
Существует множество способов сделать все! Выберите тот, который вам больше всего подходит.
thx для вашего объяснения и кода, и я исправил свою проблему. –
Кстати, что такое свойство тега вообще? –
Используется для хранения некоторых пользовательских данных в элементах управления. Все элементы управления WPF и WindowsForms обладают этим свойством. Кстати, свойство DataContext кнопки уже указывает на тот же самый объект. –
Вы можете получить эту информацию с DataContext
.
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
Persons = new ObservableCollection<Person>() {
new Person() { Name = "John", Age = 30 },
new Person() { Name = "Tim", Age = 48 }
};
lbPersons.DataContext = Persons;
private void person_Clicked(object sender, RoutedEventArgs e) {
Button cmd = (Button)sender;
if (cmd.DataContext is Person) {
Person p = (Person)cmd.DataContext;
}
}
И в XAML:
<Window.Resources>
<DataTemplate x:Key="UserTemplate" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=Name}" Width="50"/>
<TextBlock Text="{Binding Path=Age}" Width="20"/>
<Button Content="Click" Click="person_Clicked"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox IsSynchronizedWithCurrentItem="True" Name="lbPersons" ItemsSource="{Binding}" ItemTemplate="{StaticResource UserTemplate}" />
</Grid>
- 1. Идентифицировать кнопку, нажатую в раскадровке iOS
- 2. Как идентифицировать кнопку, нажатую из динамически сгенерированной таблицы
- 3. Подтвердить нажатую кнопку
- 4. Как отпустить нажатую кнопку java
- 5. идентифицировать изображение принадлежит к продукту перед отправкой
- 6. Определите нажатую кнопку в javafx
- 7. Обнаружить нажатую кнопку на форме
- 8. JQuery не распознает нажатую кнопку
- 9. Как идентифицировать связанный виджет при щелчке по элементу списка?
- 10. Обратитесь к элементу списка
- 11. Определить нажатую кнопку раскрывающегося списка в Tkinter Python
- 12. Как выделить кнопку, нажатую на vb.net
- 13. Привязать кнопку к выбранному элементу
- 14. Как идентифицировать команду POST, которая принадлежит реперсону,
- 15. Как узнать, к какому элементу управления принадлежит графический объект?
- 16. Как получить Winforms ToolStripSplitButton, чтобы запомнить последнюю нажатую кнопку?
- 17. Selenium: Как идентифицировать кнопку WebElement
- 18. Добавить ограничения к элементу списка
- 19. Доступ к элементу списка просмотра
- 20. доступ к элементу списка c + +
- 21. Как получить нажатую строку из списка с помощью OnItemClick?
- 22. Доступ к элементу списка. C#
- 23. Применение функции к определенному элементу списка списка
- 24. Невозможно записать кнопку удаления, нажатую в jQuery
- 25. Отправить кнопку, нажатую несколько раз (jmeter)
- 26. Как добавить к последнему элементу двумерного списка?
- 27. Как добавить число к данному элементу списка?
- 28. Как добавить к элементу списка a checkbox
- 29. Как добавить дополнительную ценность к элементу списка
- 30. Как вы привязываетесь к элементу списка?
Depends, вы защищать родовое Нажмите Handler в качестве вложенного события на ListBox? Или у вас есть обработчик события щелчка на каждом элементе ListboxItem? Во всяком случае, если объект отправителя или свойство RoutedEventArgs должно быть вашим объектом clicked. – dowhilefor
Мы можем помочь вам, если вы предоставите какой-то код или объясните, как вы это делаете. –