Как открыть контекстное меню по левому клику вместо правого клика в Silverlight - PullRequest
4 голосов
/ 25 октября 2011

Как открыть контекстное меню по левому клику вместо правого клика в серебряном свете

<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>

Ответы [ 2 ]

7 голосов
/ 25 октября 2011

Попробуйте это:

// 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;
}
1 голос
/ 13 марта 2015

Если у вас более одной кнопки с контекстным меню на одном элементе управления, событие нажатия вызывает проблемы с положением контекстного меню.

Эта ситуация возникает, когда вы нажимаете кнопку 1,меню будет открыто, переместите мышь на button2, нажмите один раз, меню закроется и щелкните еще одно без перемещения мыши.Откроется новое меню в позиции, где было меню от кнопки 1.

Чтобы решить эту проблему, вам необходимо перестроить проект Silverlight Toolkit.

  1. Загрузить исходный код из https://silverlight.codeplex.com
  2. Открыть проект Control.Input.Toolkit -> ContextMenu -> ContextMenu.cs и изменить

внутренний владелец DependencyObject

примерно так:

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);
                    }
                }
            }
        }

Создайте его, измените ссылки на новые библиотеки DLL в вашем проекте Silverlight и установите в кнопку

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>
...