Щелкните правой кнопкой мыши контекстное меню для украшения - не работает и вызывает вместо этого меню редактора (VS2010) - PullRequest
1 голос
/ 14 октября 2010

Я создал элемент управления в XAML и добавил его в слой украшений, в элементе управления есть раздел, который должен вызывать контекстное меню при щелчке правой кнопкой мыши (используя свойство TextBox.ContextMenu). Я протестировал его в обычном окне WPF, и он прекрасно работает. Однако, когда я попробовал то же самое в Visual Studio на слое украшений, я получил только контекстное меню редактора VS2010.

Я также попытался использовать обычное событие MouseRightButtonUp, которое, похоже, работает (событие поступает в функцию). Однако, как только функция события завершается, контекстное меню редактора выскакивает.

  1. Как мне сделать обычный контекстное меню для работы?
  2. Если есть нет, как я могу помешать редактору контекстное меню от прыжка после Функция MouseRightButtonUp?
  3. (Продолжение до # 2) Как мне вызвать контекстное меню вручную из MouseRightButtonUp

Спасибо, Виталий

1 Ответ

2 голосов
/ 14 октября 2010

В обработчике правой кнопки вверх вы отмечаете событие как обработанное?Если нет, редактор увидит событие после завершения работы вашего обработчика.Если вы помечаете его как обработанный, но он все еще не работает, есть еще один вариант.

Более "официальный" способ сделать это - реализовать IMouseProcessorProvider + MouseProcessorBase.Вам нужно будет переопределить PreprocessMouseRightButtonUp, но только тогда, когда ваше украшение - это элемент, по которому щелкнули.Вот как работает нормальный код контекстного меню редактора;он реализует один из этих процессоров мыши, обрабатывает щелчки правой кнопкой мыши и просит оболочку Visual Studio показать контекстное меню в месте щелчка (отправив команду SHOWCONTEXTMENU).

Если вы идете по этому пути, процессор мышиу провайдера должны быть метаданные (набранные вручную, извините за опечатки):

[Export(typeof(IMouseProcessorProvider))]
[Name("WhateverYouWantToCallIt")]
[Order(Before = "VisualStudioMouseProcessor")]
[ContentType("text")] // or whatever your adornment is specific to
[TextViewRole(PredefinedTextViewRoles.Interactive)]
internal sealed class MouseProcProvider : IMouseProcessorProvider
...