Problema Gestione Mouse con DrawingVisual

di il
2 risposte

Problema Gestione Mouse con DrawingVisual

Buongiorno,
Sto riscontrando delle anomile nella gestione degli eventi relativi al mouse in una applicazione che sto sviluppando in WPF VB.NET Core 3.1, che fa largo utilizzo dei DrawingVisual.
Appena ho un attimo preparo un esempio minimale del problema, che in sostanza è che gli eventi mouseup e mousedown non vengono eseguiti quando il mouse è sopra ad un rettangolo. Mi chiedevo se qualcuno nel forum ha esperienza nell'utilizzo di questi elementi grafici?
P.S. Qualcuno sa dirmi perchè su molti controlli in WPF non è più disponibile l'evento click, ma solo buttonup e down?

2 Risposte

  • Re: Problema Gestione Mouse con DrawingVisual

    damien ha scritto:


    Sto riscontrando delle anomile nella gestione degli eventi relativi al mouse in una applicazione che sto sviluppando in WPF VB.NET Core 3.1, che fa largo utilizzo dei DrawingVisual. [...]
    gli eventi mouseup e mousedown non vengono eseguiti quando il mouse è sopra ad un rettangolo.
    Nella documentazione ufficiale di queste classi è espressamente indicato che si tratta di componenti visuali molto semplici proprio perché orientati specificatamente per il disegno, quindi lasciati il più "leggeri" possibile.

    Opterei per un'altra famiglia di controlli nel ricavare le funzionalità di cui hai bisogno, essendo richiesta una certa interattività.

    Ciao!
  • Re: Problema Gestione Mouse con DrawingVisual

    Ciao, ho optato per i DrawingVisual per un fattore di prestazioni, dopo aver già testato altre opzioni più semplici ed interattive; Il mio problema, non è implementare l'interattività che è richiesta(4 grafici a linee colorate scrollabili e modificabili con mouse, rettangoli colorati che evidenziano parti del grafico e un effetto sempre realizzato con rettangolo semitrasparente per indicare la selezione di una parte di grafico, e una linea verticale a mo' di cursore/puntatore), ma che gli eventi associati ai click del mouse relativi al contenitore(in questo caso un pannello canvas) smettono di funzionare come dovrebbero.
    Preciso che non agisco direttamente sul grafico tramite gli eventi, ma da essi vado a modificare i dati, quindi a ridisegnare/refreshare.
    Devo dire anche che per ottenere gli effetti visuali che volevo ho costruito un metodo che cancella e ridisegna tutto il canvas che viene chiamato ad ogni evento mouse(anche il mouse move dato che gli effetti di selezione e puntatore sono legati alla posizione del mouse). Dal debug che ho fatto se commento nel mousemove il metodo che refresha gli altri eventi riprendono a funzionare regolarmente, perdendo però parte delle funzionalità; ho provato a risolvere richiamando il refresh all'interno di un timer, che funziona, ma non posso spigermi sotto i 30ms altrimenti non si vede niente, e con quel tempo di refresh l'esperienza utente è pessima, il cursore si muove a scatti, come anche gli altri effetti.
    Mi sembra di capire che questi eventi (relativi al mosue) non vengono gestiti/generati i maniera asincrona, o sbaglio?
Devi accedere o registrarti per scrivere nel forum
2 risposte