Cambia WPF Combobox per reagire quando il mouse è in basso

 C Programming >> Programmazione C >  >> Tags >> WPF
Cambia WPF Combobox per reagire quando il mouse è in basso

La soluzione per modificare la casella combinata WPF in modo che reagisca al passaggio del mouse
è indicata di seguito:

Il ComboBox WPF non è eccezionale se utilizzato su un touch screen.
L'utente deve toccare ComboBoxItem e rilasciarlo all'interno di una determinata area ecc., entro un determinato intervallo di tempo.
Sostanzialmente un mouse verso il basso seguito da un mouse in alto.
Se l'utente tocca (o lo stesso dei clic) lentamente, non viene selezionata l'elemento ComboBox.

Per migliorare questo mi piace cambiare l'elemento ComboBox in modo che reagisca invece all'evento MouseDown,
questo renderà la selezione dell'elemento ComboBox molto più naturale quando si utilizza un dito sul touch screen..

La mia idea era quella di creare un CustomComboBoxItem che ereditasse dal ComboBoxItem.

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

}

Ma deve farlo funzionare.
Continua a ricevere:

Messaggio=Non è possibile applicare uno stile destinato al tipo "CustomComboBoxItem" al tipo "ComboBoxItem".

Qualche idea su come farlo?

Non credo che ci sia bisogno di CustomComboBoxItem . Tutto quello che devi fare è chiamare il touch eventi e bloccalo quando tocca un elemento, in modo che ovunque tu vada sullo schermo, quell'elemento venga selezionato e sbloccato la prima volta che lo tocchi.

dispositivo touch

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