2010-02-12 6 views

risposta

4

Per fare questo è necessario guardare la bitmap stessa. Il meccanismo di test di successo di WPF considera qualsiasi pixel dipinto con un pennello "trasparente" per essere ancora cliccabile anche se invisibile. Questa è normalmente una buona cosa ma interferisce con ciò che stai cercando di fare. Dato che un .png dipinge con il pennello trasparente, l'intero file .png viene considerato come dipinto quando si esegue il test dei colpi.

Quello che dovete fare nel vostro gestore di eventi MouseMove è:

  1. Vai avanti e richiamare colpito testare il modo normale.
  2. Per ogni HitTestResult torni, controllare per vedere se si tratta di un Image e in caso affermativo, se un pixel trasparente è sotto il mouse
  3. Quando si ottiene un colpo su un non-immagine o un pixel non trasparente di un'immagine, basta.
  4. decidere un valore Cursor base a ciò il mouse è sopra

Per determinare se un mouse è sopra un pixel trasparente di un'immagine:

  1. ottenere la posizione del mouse rispetto all'immagine (e.GetPosition(image))
  2. Se stai usando stiramento è necessario eseguire il-calcolare il tratto a questo punto per ottenere un indice bitmap
  3. Usa BitmapSource.CopyPixels per copiare un recta 1 pixel ngle in un array (es. solo il singolo pixel del mouse si trova sopra)
  4. controllare il valore dei pixel che è stata recuperata per vedere se si tratta di un pixel trasparente
+0

Questo è più o meno quello che ho fatto e funziona brillantemente. – TWith2Sugars