我想在用户单击任何给定的ListBox项时运行一些代码。我的设置是一个带有自定义ItemsPanelTemplate (Pavan的ElementFlow)的ListBox。根据输入到MouseLeftButtonDown的位置数据,有没有一种方法来判断哪个项目被点击了?定制的ItemsPanelTemplate使这变得更困难(或更混乱)。
发布于 2009-08-26 16:01:32
您可以拥有一个ItemContainerStyle,并在其中指定一个EventSetter:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseLeftButtonDown" Handler="ListBoxItem_MouseLeftButtonDown" />
...然后,在MouseLeftButtonDown的处理程序中,“发送者”将是ListBoxItem。
此外,如果您不想使用此方法,可以调用HitTest来查找指定位置的可视对象:
HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);
ListBoxItem lbi = FindParent<ListBoxItem>( result.VisualHit );
public static T FindParent<T>(DependencyObject from)
where T : class
{
T result = null;
DependencyObject parent = VisualTreeHelper.GetParent(from);
if (parent is T)
result = parent as T;
else if (parent != null)
result = FindParent<T>(parent);
return result;
}https://stackoverflow.com/questions/1335745
复制相似问题