当用户单击任何给定的 ListBox
时,我想运行一些代码元素。我的设置是 ListBox
带定制ItemsPanelTemplate
(Pavan 的 ElementFlow)。基于进入 MouseLeftButtonDown
的位置数据有没有办法知道点击了哪个项目?自定义 ItemsPanelTemplate
使这变得更加困难(或更令人困惑)。 .
最佳答案
您可以拥有一个 ItemContainerStyle,并在其中指定一个 EventSetter:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseLeftButtonDown" Handler="ListBoxItem_MouseLeftButtonDown" />
...
然后,在 MouseLeftButtonDown 的处理程序中,“发送者”将是 ListBoxItem。
另外,如果你不想使用这个方法,你可以调用 HitTest 来找出指定位置的 Visual 对象:
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;
}
关于wpf - 从 MouseLeftButtonDown 获取 WPF ListBox 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335745/