Magazine Internet

[WPF] Cas pratique de l’utilité du RoutedEvent

Publié le 22 avril 2009 par Jeremy.jeanson

Le RoutedEventHandler qui remplace l’EventHandler de WinForm dans WPF et bien souvent un grand incompris. Dans le cadre de son fonctionnement par défaut, si un event se produit sur un control, le control va traiter cet event et déclencher l'e même event sur son parent. C’est ce qui est appelé le Bubbling (voir la msdn pour plus d’informations).

Mais ce que l’on oublie vite c’est qu’il est possible de stopper la propagation d’un event si a déjà fait le traitement qui nous semblait adéquat. Ceci ce fait via le propriété Handled du RoutedEventHandler (par défaut la variable e de l’event).

Donc en pratique, pour une Window dont le drag and drop est actif si j’abonne les event Drop de ma Window et d’un de ses Controls à deux méthodes, je peux dans la méthode du controls interdire la remonté de l’event Drop à ma Window.

XAML

<Window x:Class="MyDock.MyDockWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    AllowDrop="True" 
    DragOver="Window_DragOver" 
    Drop="Window_Drop" Background="Transparent">
    <Grid>
        <Image Drop="Drop="Control_Drop" />
    </Grid>
</Window>

Vb

        
''' <summary>
''' Drop sur la window
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Window_Drop(ByVal sender As Object,ByVal e As DragEventArgs)
	' Traitement à faire pour un Dop sur ma Window
End Sub

''' <summary>
''' Drop sur le control
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Control_Drop(ByVal sender As Object, ByVal e As DragEventArgs)
	' Traitement à faire pour un Drop sur mon Control
	If (“test si le traitement est ok”
	    “traitement ok l'event ne doit pas remonter”) Then
		e.Handled = True                
	End If
End Sub

C#

        
/// <summary>
/// Drop sur la window
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_Drop(object sender, DragEventArgs e)
{
	// Traitement à faire pour un Dop sur ma Window
}

/// <summary>
/// Drop sur le control
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Control_Drop(object sender, DragEventArgs e)
{
	// Traitement à faire pour un Drop sur mon Control
	if( “test si le traitement est ok” 
	    “traitement ok l'event ne doit pas remonter”)
	{
		e.Handled = true;                
	}           
}

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog