Silverlight Toolkit ContextMenu: на каком элементе управления щелкнули правой кнопкой мыши? - PullRequest
1 голос
/ 27 октября 2011

Silverlight Toolkit имеет прекрасный ContextMenu, который может использоваться несколькими экземплярами элементов управления, такими как Textbox.Совместное использование может быть результатом объявления ContextMenu в контейнере, который также содержит другие элементы управления.

<StackPanel>
    <TextBox x:Name="box1" Text="{Binding str1}"  />
    <TextBox x:Name="box2" Text="{Binding str2}"  />
    <toolkit:ContextMenuService.ContextMenu>
        <toolkit:ContextMenu Name="cm">
            <toolkit:MenuItem Name="cmiCut" Header="Cut" />
            <toolkit:MenuItem Name="cmiCopy" Header="Copy" />
            <toolkit:Separator/>
            <toolkit:MenuItem Name="cmiPaste" Header="Paste" />
        </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
</StackPanel>

Совместное использование также может быть достигнуто с помощью вызова ContextMenuService.SetContextMenu.

Когда ContextMenu используется совместно, для обработчика событий очень полезно знать, какой элемент управления был нажат правой кнопкой мыши, чтобы открытьContextMenu (например, контекст).Может ли кто-нибудь предложить эффективный способ сделать это?

Для сравнения, эта потребность решается на других платформах следующим образом:

  1. В ContextMenu WPF есть ContextMenu.PlacementTarget
  2. ContextMenuStrip WinForms имеет ToolStripItem.Owner.SourceControl

Спасибо,

Билл

1 Ответ

1 голос
/ 28 октября 2011

Я хотел бы поблагодарить Эрика Норена за ведение блога по этой теме.Я определил свой ContextMenu в прямоугольнике с Visibility = Collapsed на моем MainPage.xaml, чтобы он не обрабатывал событие щелчка правой кнопкой мыши.При щелчке правой кнопкой мыши в любом месте страницы я использую

VisualTreeHelper.FindElementsInHostCoordinates

, чтобы определить текстовое поле в позиции щелчка, а затем открыть ContextMenu.Техника Эрика для нахождения элемента управления со свойством зависимостей SelectedText блестящая.

...