Если у вас более одной кнопки с контекстным меню на одном элементе управления, событие нажатия вызывает проблемы с положением контекстного меню.
Эта ситуация возникает, когда вы нажимаете кнопку 1,меню будет открыто, переместите мышь на button2, нажмите один раз, меню закроется и щелкните еще одно без перемещения мыши.Откроется новое меню в позиции, где было меню от кнопки 1.
Чтобы решить эту проблему, вам необходимо перестроить проект Silverlight Toolkit.
- Загрузить исходный код из https://silverlight.codeplex.com
- Открыть проект 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>