2011-10-25 4 views
4

Comment ouvrir le menu contextuel sur clic gauche au lieu de clic droit dans silverlightComment ouvrir le menu contextuel sur clic gauche au lieu de clic droit dans silverlight

<Button Content="Add" Command="{Binding AddTemplateCommand}" Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="14,18,0,0" Name="button1" VerticalAlignment="Top" Width="75" > 
    <toolkit:ContextMenuService.ContextMenu > 
     <toolkit:ContextMenu Name="contextMenu1" > 
      <toolkit:MenuItem Name="FixedToken" Header="FixedToken" ></toolkit:MenuItem> 
      <toolkit:MenuItem Name="SequenceToken" Header="SequenceTokenToken" ></toolkit:MenuItem>        
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</Button> 
+0

je serais probablement utiliser un contrôle PopUp au lieu, puis gérer l'événement MouseLeftButtonDown de son élément parent. –

Répondre

7

Essayez ceci:

// On click 
private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    ContextMenuService.GetContextMenu(button1).IsOpen = true; 
} 

// On right-click 
private void button1_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    e.Handled = true; 
} 
+0

+1, bonne idée! :) –

1

lorsque vous avoir plus d'un bouton avec le menu contextuel sur un contrôle, l'événement de clic provoque des problèmes avec la position du menu contextuel. Cette situation se produit lorsque vous cliquez sur le bouton 1, le menu sera ouvert, déplacez la souris sur le bouton 2, cliquez une fois, le menu sera fermé et cliquez sur un autre sans déplacer la souris. Nouveau menu ouvre sur la position où était le menu de button1.

Pour résoudre ce problème, vous devez reconstruire le projet Silverlight Toolkit.

  1. Télécharger le code source de https://silverlight.codeplex.com
  2. projet Open Control.Input.Toolkit -> ContextMenu -> ContextMenu.cs et changer

DependencyObject interne Propriétaire

comme ceci:

internal DependencyObject Owner 
     { 
      get { return _owner; } 
      set 
      { 
       if (null != _owner) 
       { 
        FrameworkElement ownerFrameworkElement = _owner as FrameworkElement; 
        if (null != ownerFrameworkElement) 
        { 
         ownerFrameworkElement.MouseLeftButtonDown -= new MouseButtonEventHandler(HandleOwnerMouseRightButtonDown); 
         ownerFrameworkElement.MouseRightButtonDown -= new MouseButtonEventHandler(HandleOwnerMouseRightButtonDown); 
        } 
       } 
       _owner = value; 
       if (null != _owner) 
       { 
        FrameworkElement ownerFrameworkElement = _owner as FrameworkElement; 
        if (null != ownerFrameworkElement) 
        { 
         ownerFrameworkElement.MouseLeftButtonDown += new MouseButtonEventHandler(HandleOwnerMouseRightButtonDown); 
         ownerFrameworkElement.MouseRightButtonDown += new MouseButtonEventHandler(HandleOwnerMouseRightButtonDown); 
        } 
       } 
      } 
     } 

construire, changer les références aux nouveaux dll dans votre projet Silverlight et mis en bouton

ClickMode = "Hover"

<Button Content="Contextmenu" x:Name="button1" ClickMode="Hover" > 
    <toolkit:ContextMenuService.ContextMenu > 
     <toolkit:ContextMenu Name="contextMenu1" > 
      <toolkit:MenuItem />       
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</Button> 
Questions connexes