在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
}
}
}
扩增要求
对不起,我不明白你的话?你能更详细地解释一下吗? – 2012-03-07 12:37:58
他的意思是,Listbox,你的孩子被点击的地方,也因为点击一个子项目而改变SelectedIndex和SelectedItem属性。您可以使用这些属性查看哪个项目被点击。 – dowhilefor 2012-03-07 12:44:02
似乎已经绑定列表框的集合,和你的按钮是你的数据的一部分模板或项目模板。
您可以将按钮的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>
并单击事件:
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为您的解释和代码,我已经解决了我的问题。 – 2012-03-07 12:59:24
顺便说一下,标签属性一般是关于什么的? – 2012-03-07 13:06:34
它用于在控件中存储一些自定义用户数据。 WPF和WindowsForms的所有控件都具有此属性。顺便说一句,按钮的DataContext属性已经指向完全相同的对象。 – 2012-03-07 13:14:13
您可以从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. 如何识别哪个按钮点击哪个部分UICollectionView iOS?
- 2. 如何识别哪个按钮被点击
- 3. 如何识别点击了哪个按钮? (MVVM)
- 4. 识别按钮点击
- 5. WPF如何找到哪个列表框项目被点击
- 6. 更改选定的列表框项目DataTemplate的按钮点击
- 7. 识别哪个动态生成的按钮被点击
- 8. 找出被点击的项目属于哪个表单
- 9. 如何使用WPF中的MVVM模式识别哪个按钮被点击?
- 10. 可扩展列表按钮点击与项目点击
- 11. 确定我的列表框中点击了哪个项目?
- 12. Jquery-如何识别一个点击按钮的类
- 13. 如何捕获哪个标签列表按钮被点击?
- 14. 如何让按钮点击ListView项目?
- 15. 如何知道多选Microsoft Access列表框中的哪个项目被点击?
- 16. 点击了哪个按钮?
- 17. 嵌套列表如何一步一步基于点击哪个按钮
- 18. Android:Spinner基于哪个按钮点击的选项
- 19. 无法识别我是否已经点击列表项目
- 20. 按钮点击排序WPF列表框?
- 21. 刷新列表框点击按钮后
- 22. 列表框不可点击的项目
- 23. 如何在项目列表视图中点击按钮时刷新列表
- 24. 为按钮单击识别
- 25. 我如何识别self.editButtonItem按钮的点击事件?
- 26. 更改下拉列表按钮上的选定项目点击
- 27. 列表组项目中的可点击按钮或图形
- 28. 选择按钮点击后的下拉列表项目
- 29. 如何识别哪个按钮被按下?
- 30. 按钮点击方法如何找出在ListView中选择哪个项目?
取决于你捍卫一个通用的点击处理程序的列表框的附加事件?或者你有每个ListboxItem点击事件处理程序?无论如何,如果发件人对象或RoutedEventArgs中的Source属性应该是您单击的项目。 – dowhilefor 2012-03-07 12:42:54
如果您提供一些代码或解释您如何执行此操作,我们可以更好地为您提供帮助。 – 2012-03-07 12:46:45