我有一個ListBox和一個ItemTemplate,其中包含一個與鼠標交互的控件。這會干擾ListBox的選擇功能,即單擊控件不會選擇該項目。這是因爲ListBoxItem在OnMouseLeftButtonDown中將鼠標事件的Handled屬性設置爲true。我嘗試以下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 2010-07-07 11:55:46
預覽事件發生在實際事件之前:所以如果你在那裏做了處理,然後設置e.Handled = false;你的代碼將被執行,但是ListBox仍然會運行它自己的處理代碼,以改變選擇的項目。至少有希望;這就是我的理解! – 2010-07-07 12:21:48