2017-05-18 4 views
1

J'ai une zone de liste (dans Silverlight) qui utilise un DataTemplate pour ItemTemplate. Le DataTemplate est défini comme ceci:XAML: MouseLeftButtonUp se déclenche uniquement lorsque vous cliquez sur du texte, et non sur un espace

<DataTemplate> 
    <StackPanel Orientation="Horizontal" 
       MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp" 
       Tag="{Binding}"> 
     <TextBlock Name="roleItem" 
        Text="{Binding Path=DisplayValue, Mode=TwoWay}"/> 
    </StackPanel> 
</DataTemplate> 

J'ai trouvé que mon événement RoleStackPanel_MouseLeftButtonUp ne se déclenche que si un texte affiché dans le TextBlock est cliqué. Si l'utilisateur clique sur un espace dans l'élément à droite du texte, l'événement ne se déclenche pas. Disons donc que le contrôle est de 300px mais que le mot "Admin" est dans l'élément, vous DEVEZ cliquer sur "Admin" et non sur l'espace vide à droite.

Comment puis-je faire en sorte que les événements se déclenchent partout où je clique dans l'élément, sur du texte ou des espaces?

Répondre

2

Donc, quelques considérations rapides pour vous aider à trier. A.) La zone de votre panneau n'a pas HitTestVisibility par défaut. C'est par conception et intentionnel. Pour que votre événement se déclenche pour le parent, il suffit d'ajouter la propriété IsHitTestVisible="True" ou de fournir un Brush pour le panneau via Background="Transparent" afin d'invoquer HitTestVisibility.

b.) Un StackPanel ne consommera que l'espace requis par ses enfants. Si vous souhaitez fournir une zone étendue pour un utilisateur à frapper comme vous le décrivez, remplacez le StackPanel par Grid qui devrait consommer tout l'espace mis à disposition par son parent. Les mêmes règles de HitTestVisibility s'appliquent.

<DataTemplate> 
    <Grid IsHitTestVisible="True" 
      MouseLeftButtonUp="RoleStackPanel_MouseLeftButtonUp" 
      Tag="{Binding}"> 
     <TextBlock Name="roleItem" 
        Text="{Binding Path=DisplayValue, Mode=TwoWay}" /> 
    </Grid> 
</DataTemplate> 

Espérons que cela aide, bravo!

+0

C'était tout! Merci de votre aide. Un énorme gain de temps! – Walter