當列表被放下時,鼠標懸停在下拉列表中的某個項目上,項目將突出顯示,但文本框中顯示的選定值不會更改,除非項目被點擊。我正在尋找一種方法來修改從ComboBox繼承的控件上的鼠標移動行爲。我嘗試覆蓋功能,如OnMouseEnter
& OnMouseMove
等覆蓋WPF組合框中的鼠標移動行爲
0
A
回答
2
你可以通過覆蓋OnMouseMove來完成。 MouseEventArgs的OriginalSource屬性將爲您提供直接在鼠標下面的元素。您可以使用ContainerFromElement獲取包含該元素的ComboBoxItem然後ItemContainerGenerator.ItemFromContainer拿到項目選擇:
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
var container = ContainerFromElement((DependencyObject)e.OriginalSource);
if (container != null)
{
SelectedItem = ItemContainerGenerator.ItemFromContainer(container);
}
}
0
而是使用TextBlock,具有箭頭和ListBox的切換按鈕創建自己的控件。當ToggleButton被選中時顯示列表框。當用戶將鼠標放在listboxitem上時,更改文本框中的文本並更新所選項目的某些屬性或激發一個事件。
0
這是我如何解決同樣的問題,在我的代碼,厚福,這可能是有用的爲別人,或者只是邁向完整的xaml解決方案。
我遵循Quartermeister的解決方案。但在我看來,需要繼承ComboBox是一個設計弱點(因爲這只是爲了處理MouseOver事件)。因爲我只需要處理MouseOver事件的不同行爲,所以我只實現了處理連接到XAML文件的類中的MouseOver事件的方法。
首先,我使用了EventSetter類,它是Setter類的子類,它特定於Events。所以EventSetter可以像我們通常用Setter一樣來裝飾FrameworkElements。
<ComboBox>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<EventSetter Event="MouseMove" Handler="_updateModel"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
通過這種方式,當鼠標懸停它時,每個ComboBoxItem都會調用_updateModel。
我_updateModel的實施是相當直接,它是基於強烈的Quartermeister的工作:
private void _updateModel(object sender, MouseEventArgs e)
{
DependencyObject src = e.Source as DependencyObject;
ComboBoxItem cbi = VisualTreeHelper.GetParent(src) as ComboBoxItem;
while ((cbi == null) && (src!=null))
{
src = VisualTreeHelper.GetParent(src);
cbi = src as ComboBoxItem;
}
if (cbi != null)
{
ComboBox cb = ItemsControl.ItemsControlFromItemContainer(cbi) as ComboBox;
if (cb != null)
{
var container = cb.ContainerFromElement((DependencyObject)e.OriginalSource);
if (container != null)
{
cb.SelectedItem = cb.ItemContainerGenerator.ItemFromContainer(container);
}
}
}
}
其他方法來解決同樣的問題可以用blend's behaviors 對於那些不值得在這裏解釋的原因,我無法使用這種行爲。
相關問題
- 1. 在組合框中禁用滾動鼠標移動(WPF)
- 2. wpf中的鼠標移動
- 3. 當組合框專注於WPF鼠標行爲
- 4. WPF組合框沒有響應鼠標
- 5. C#組合框覆蓋ToString
- 6. 覆蓋在組合框
- 7. WPF組合框項標籤行爲
- 8. WPF檢測鼠標移動?
- 9. 自定義類ToString()覆蓋不顯示在WPF組合框中
- 10. C#奇怪的WPF組合框行爲
- 11. 覆蓋MEF組合
- 12. 鼠標懸停和鼠標移動的WPF工具提示
- 13. 將鼠標移到組合框彈出列表中
- 14. 啓動時覆蓋的組合鍵
- 15. WPF組合框 - 由標籤
- 16. 更改行數WPF中的鼠標滾輪滾動列表框
- 17. 覆蓋/覆蓋/堆疊元素上的Javascript鼠標事件
- 18. WPF組合框選擇行爲
- 19. WPF組合框綁定行爲
- 20. WPF滑塊行爲像組合框
- 21. WPF DataGrid組合框列:在列中傳播標題組合框
- 22. 移動鼠標
- 23. WPF「飛行」組合框
- 24. WPF中的多行組合框
- 25. 將WPF DataGrid上的列高亮顯示爲鼠標移動
- 26. Lostfocus actsas gotfocus爲wpf中的組合框
- 27. 當鼠標移動到覆蓋元素的東西時,不要開火onmouseout
- 28. 從命令行覆蓋目標框架
- 29. 覆蓋Winforms組合框自動完成建議規則
- 30. 用鼠標在JTable中移動行