當列表被放下時,鼠標懸停在下拉列表中的某個項目上,項目將突出顯示,但文本框中顯示的選定值不會更改,除非項目被點擊。我正在尋找一種方法來修改從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. Qt的鼠標移動/動作組合
- 5. WPF組合框沒有響應鼠標
- 6. 組合框鼠標移過顏色
- 7. WPF組合框項標籤行爲
- 8. 覆蓋在組合框
- 9. C#組合框覆蓋ToString
- 10. WPF檢測鼠標移動?
- 11. 如何在wpf上的鼠標左鍵組合框中關注組合框?
- 12. 自定義類ToString()覆蓋不顯示在WPF組合框中
- 13. WPF組合框忽略的ToString覆蓋對象
- 14. 如果鼠標不移動,你如何使覆蓋層淡出?
- 15. 覆蓋鼠標圖片
- 16. 奇怪的Tkinter鼠標移動行爲
- 17. C#奇怪的WPF組合框行爲
- 18. 從組合框中移除組合框項目WPF
- 19. 覆蓋MEF組合
- 20. 鼠標懸停和鼠標移動的WPF工具提示
- 21. WPF組合框 - 由標籤
- 22. 啓動時覆蓋的組合鍵
- 23. 將鼠標移到組合框彈出列表中
- 24. WPF中的組合框標題內容
- 25. 在組合框/列表框中啓用鼠標滾輪滾動
- 26. 更改行數WPF中的鼠標滾輪滾動列表框
- 27. ExtJS 5.0 - 移動組件覆蓋
- 28. WPF組合框綁定行爲
- 29. WPF滑塊行爲像組合框
- 30. WPF組合框選擇行爲