Получить элемент списка WPF из MouseLeftButtonDown
Я хочу запустить некоторый код, когда пользователь нажимает один раз на любой данный ListBox
вещь. Моя установка ListBox
с обычаем ItemsPanelTemplate
(Элементный поток Павана). На основании данных о местоположении, которые поступают в MouseLeftButtonDown
Есть ли способ узнать, какой элемент был нажат? Это делается немного сложнее (или более запутанно) по обычаю ItemsPanelTemplate
,
1 ответ
Решение
Вы можете иметь 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;
}