[WPF] - Events

Bonjour à tous !

J’aurai quelques questions sur WPF ! (hé oui, encore !)

1°/ Est-il possible de d’interrompre ou d’annuler un routed event ? c’est-à-dire par exemple que quand je clique avec le bouton droit de la souris pour faire apparaitre le ContextMenu, je souhaiterai que OnMouseLeave ne se déclenche pas (car le contextmenu peut être plus grand et dépasser de la surface du DockPanel.

2°/ J’ai besoin que mon dockpanel "ParentElement disparaisse au bout de 3 secondes : Pour cela j’ai crée une animation et un trigger (généré depuis Blend) :

Cela fonctionne correctement. En revanche lorsque l’événement OnMouseEnter du rectangle est appelé :

private void TestElement_MouseEnter(object sender, MouseEventArgs e)
{
this.ParentElement.Visibility = System.Windows.Visibility.Visible;
}

et bien l’affectation ne se fait pas. Pourtant l’événement est bien levé et la méthode passe bien dedans (j’ai vérifié) mais ça n’a aucun effet. Je ne comprends pas pourquoi.

Pour l’instant j’ai crée un autre routedevent qui fait le contraire mais ça ne me satisfait pas pleinement !

Si vous avez quelques idées… :smiley:

PS : Pour mieux comprendre j’ai fait un exemple de ce que j’ai actuellement.

Workaround a deux balles (et encore): et si tu… merde, j’ai le mot sur le bout de la langue, bon disons si tu « re-ecris » OnMouseLeave, c’est autorise en WPF ou bien il t’envoie bouler (le compilateur ou l’API ou n’importe quoi d’autres hein).

Indirectement c’est surtout pour te faire un UP, parce que la je seche grave.

Edit: si vous retrouvez le mot que je cherche, je suis preneur hein :smiley:

Override ?

Ha zut, j’allais dire “surcharge” (smiley avec béret et baguette)

Au final je suis passé par un DispatcherTimer et j’ai fait ça :

[code]// Initialise le dispatcher
private void InitDispatcherTimer()
{
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 3);
}

// Cache le ParentElement
private void dispatcherTimer_Tick(object o, EventArgs sender)
{
this.ParentElement.Visibility = System.Windows.Visibility.Hidden;
dispatcherTimer.Stop();
}

// Est appelé lorsque la souris sort de ParentElement
private void ParentElement_MouseLeave(object sender, MouseEventArgs e)
{
this.dispatcherTimer.Start();
}[/code]

Beurk.

Glop > Productif .