当列表被放下时,鼠标悬停在下拉列表中的某个项目上,项目将突出显示,但文本框中显示的选定值不会更改,除非项目被点击。我正在寻找一种方法来修改从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中移动行