我有一个带有 ItemTemplate 的 ListBox,其中包含一个与鼠标交互的控件。这会干扰 ListBox 的选择功能,即单击控件不会选择项目。这是因为 ListBoxItem 在 OnMouseLeftButtonDown 中将鼠标事件的 Handled 属性设置为 true。我尝试了以下
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;
}
这确实有效,但感觉更像是一个丑陋的组合,而不是一个优雅的解决方案。有没有更好的解决方案不依赖于可视化树的确切内容?