想要创建一个包含文本块和按钮itemtemplate的列表框

时间:2010-05-29 09:05:48

标签: wpf xaml binding listbox

alt text http://www.freeimagehosting.net/uploads/abbcae9cd3.png

我想创建一个像图片中所示的列表框, 我只是不知道如何获得列表框中每个项目的按钮(红色关闭按钮)点击事件 任何人都可以指点我这个

的好教程

由于

2 个答案:

答案 0 :(得分:2)

像往常一样创建一个按钮,使用Click处理程序:

<Button Click="MyClickHandler">...</Button>

现在,在您的单击处理程序中,您有sender参数,该参数将包含单击的按钮。但是,您想要按钮所属的项目。首先,您需要包含按钮的ListViewItem。有几种如何找到视觉祖先的实现,here's the first result I found.将该扩展方法添加到某个静态类。所以现在你的点击处理程序如下所示:

private void MyClickHandler(object sender, RoutedEventArgs e)
{
     ListViewItem parent = ((DependencyObject)sender).TryFindParent<ListViewItem>();
}

现在您需要检索与此ListViewItem一起使用的项目。幸运的是,这更简单(虽然我不知道它是什么,因为你的帖子没有说):

    object ItemRelatedToButton = TheListBoxInQuestion.ItemContainerGenerator.ItemFromContainer(parent);

object替换为ListBox实际包含的类型,以及包含实际相关名称的名称。此时,您现在可以与按钮“附加”的项目进行交互。

您可能还希望确保parent不为空,以防万一发生了奇怪的事情,理论上您应该确保ItemRelatedToButton也不为空。

答案 1 :(得分:0)

如果您不想编写代码,就像MVVM建议的那样,您有两种选择: 1.如果datatemplate中的控件支持ICommand,则将DataContext作为CommandParameter发送。然后该参数将传递给您的命令执行方法。 2.如果控件没有ICommand属性,则创建一个附加属性,在PropertyChangedCallback回调中,您可以将命令挂钩到您单击的事件。然后,在Xaml中,您可以将Datacontext作为CommandParameter传递。

很抱歉没有详细说明,但是如果你搜索MVVM,Command和Attached,你应该找到大量的详细信息。