Используя .NET 4 и VS2010 Pro, я создал очень простое приложение WPF, которое содержит следующий XAML в MainWindow:
<Grid>
<RichTextBox x:Name="richTextBox"
Margin="2"/>
</Grid>
Все, что я хотел бы сделать, и до сих порнеуспешным в этом, является замена ContextMenu для RichTextBox своим собственным.Я попробовал код от MSDN , но не повезло:
public MainWindow()
{
InitializeComponent();
richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);
}
private void richTextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
RichTextBox rtb = sender as RichTextBox;
if (rtb == null)
{
return;
}
ContextMenu contextMenu = rtb.ContextMenu;
contextMenu.Items.Clear();
MenuItem menuItem = new MenuItem();
menuItem.Header = "Test";
contextMenu.Items.Add(menuItem);
contextMenu.PlacementTarget = rtb;
contextMenu.Placement = PlacementMode.RelativePoint;
TextPointer position = rtb.Selection.End;
if (position == null)
{
return;
}
Rect positionRect = position.GetCharacterRect(LogicalDirection.Forward);
contextMenu.HorizontalOffset = positionRect.X;
contextMenu.VerticalOffset = positionRect.Y;
contextMenu.IsOpen = true;
e.Handled = true;
}
Я в растерянности из-за того, что я делаю неправильно.Связано ли это с событием MouseDown, перехваченным RTB?Должен ли я получить свою собственную версию RTB и переопределить ContextMenuOpening, чтобы заставить это работать?Это кажется чем-то действительно простым, но я просто не вижу этого.
Заранее спасибо.