更改 WPF 组合框以对鼠标按下做出反应
Posted
技术标签:
【中文标题】更改 WPF 组合框以对鼠标按下做出反应【英文标题】:Change WPF Combobox to react on Mouse down 【发布时间】:2021-10-06 06:51:55 【问题描述】:WPF ComboBox 在触摸屏上使用时效果不佳。 用户必须在特定时间范围内点击 ComboBoxItem 并在特定区域等内释放。 基本上是鼠标按下然后鼠标向上。 如果用户轻按(或与单击相同)缓慢,则不会选择 ComboBoxItem。
为了改善这一点,我喜欢更改 ComboBox 项,以便它对 MouseDown 事件做出反应, 当在触摸屏上使用手指时,这将使 ComboBox 项目的选择更加自然..
我的想法是创建一个继承自 ComboBoxItem 的 CustomComboBoxItem。
public class CustomComboBoxItem : ComboBoxItem
protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
IsSelected = true;
OnSelected(e);
但必须让这个工作。 继续获取:
Message=用于类型“CustomComboBoxItem”的样式不能应用于类型“ComboBoxItem”。
任何想法如何做到这一点?
【问题讨论】:
您是否定义了自己的组合框样式/控件模板?如果是这样,您可能需要对其进行限定以识别您派生的 CustomComboBoxItem。 此组合框不使用带有 ComboBoxItem 的 XAML 标记,而是通常使用绑定到 prsentation 模型或集合。示例:------------------------------------ ItemsSource="Binding Source=StaticResource SpeciesEnums,转换器=StaticResource SeussEnumValueToPresentationModelConverter, ConverterParameter='UseIntValue'" 【参考方案1】:我认为不需要CustomComboBoxItem。您所要做的就是调用touch
事件并在它触摸某个项目时将其锁定,这样无论您在屏幕上走到哪里,该项目都会在您第一次触摸时被选中并解锁。
touchdevice
mousedevice.capture
bool IsTouch = false;
private void ComboBoxItem_PreviewTouchDown(object sender, TouchEventArgs e)
ComboBoxItem comboBoxItem = (ComboBoxItem)sender;
e.TouchDevice.Capture(comboBoxItem);
IsTouch = true;
private void ComboBoxItem_PreviewTouchUp(object sender, TouchEventArgs e)
ComboBoxItem comboBoxItem = (ComboBoxItem)sender;
comboBoxItem.ReleaseTouchCapture(e.TouchDevice);
IsTouch = false;
private void ComboBoxItem_TouchMove(object sender, TouchEventArgs e)
if(IsTouch)
//do work.............................
【讨论】:
您是在 CustomComboBox 类中还是在 usercontrol cs 文件中添加这些订阅?或者你如何访问每个 ComboBoxItem? 使用组合框的地方。在用户控件中 xaml 看起来像这样:以上是关于更改 WPF 组合框以对鼠标按下做出反应的主要内容,如果未能解决你的问题,请参考以下文章