更改 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 看起来像这样: SO 换句话说,我没有将 ComboBoxItem 添加为 XAML 标记,而是 ItemsSource 是一个绑定 所以这些是你应该使用的事件。你知道如何使用这些事件吗?

以上是关于更改 WPF 组合框以对鼠标按下做出反应的主要内容,如果未能解决你的问题,请参考以下文章

组合选项框和组合框以将记录添加到右表

WPF - 根据项目模板更改组合框样式

更改集合时 WPF 组合框不更新

WPF:尝试根据组合框中的选择更改可见性

Excel VBA文本框以填充组合框

如果用户需要向现有选项添加新选项,如何在访问中创建一个组合框,该组合框可以转换为文本框以启用书写?