Cambie el cuadro combinado de WPF para que reaccione al presionar el mouse

 C Programming >> Programación C >  >> Tags >> WPF
Cambie el cuadro combinado de WPF para que reaccione al presionar el mouse

La solución para cambiar el cuadro combinado de WPF para que reaccione al presionar el mouse
se proporciona a continuación:

El ComboBox de WPF no es muy bueno cuando se usa en una pantalla táctil.
El usuario tiene que tocar el ComboBoxItem y soltarlo dentro de un área determinada, etc., dentro de un marco de tiempo determinado.
Básicamente, un mouse hacia abajo seguido de un mouse hacia arriba.
Si el usuario toca (o lo mismo que hace clic) lentamente, no hay selección del ComboBoxItem.

Para mejorar esto, me gusta cambiar el elemento ComboBox para que reaccione en el evento MouseDown,
esto hará que la selección del elemento ComboBox sea mucho más natural al usar un dedo en la pantalla táctil.

Mi idea era crear un CustomComboBoxItem que herede del ComboBoxItem.

public class CustomComboBoxItem : ComboBoxItem
{
    protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
    {
        IsSelected = true;
        OnSelected(e);
    }

}

Pero tengo que hacer que esto funcione.
Sigue recibiendo:

Message=Un estilo diseñado para el tipo 'CustomComboBoxItem' no se puede aplicar al tipo 'ComboBoxItem'.

¿Alguna idea de cómo hacer esto?

No creo que sea necesario CustomComboBoxItem . Todo lo que tienes que hacer es llamar al touch eventos y bloquearlo cuando toca un elemento, de modo que dondequiera que vaya en la pantalla, ese elemento se selecciona y desbloquea la primera vez que lo toca.

dispositivo táctil

dispositivoratón.capturar

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.............................
    }
}