У меня есть ListBox с ItemTemplate, который содержит элемент управления, который взаимодействует с мышью. Это связано с функциональными возможностями выбора ListBox, т. Е. Щелчок элемента управления не выбирает элемент. Это связано с тем, что ListBoxItem устанавливает для свойства Handled события mouse значение true в OnMouseLeftButtonDown. Я попробовал следующееВзаимодействие с мышью в дочерних элементах ListBoxItem (WPF)
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {
base.OnMouseLeftButtonDown(e);
e.Handled = false;
}
Но ListBoxItem “ ” берет мышь и предотвращает контроль делать свое собственное взаимодействие. Тогда у меня была другая идея
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {
base.OnMouseLeftButtonDown(e);
((ListBoxItem)VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this)))).IsSelected = true;
}
, который на самом деле работает, но чувствует себя больше как уродливое ляп, чем элегантное решение. Есть ли лучшие решения, которые не зависят от точного содержимого визуального дерева?
Благодарим за предложение, но у вас оно есть в обратном порядке: MouseLeftButtonDown - это событие барботирования, а PreviewMouseLeftButtonDown является туннельным. :) Как бы PreviewMouseLeftButtonDown улучшить ситуацию? – absence
Предварительные события происходят до фактических событий: поэтому, если вы сделали свою обработку там, а затем установите e.Handled = false ;, ваш код будет выполнен, но ListBox все равно будет запускать собственный код обработки для изменения выбранного элемента. По крайней мере, надеюсь; вот как я это понимаю! –