Использование .NET 4 и VS2010 Pro, я создал очень простое приложение WPF, содержащий следующий код XAML в MainWindow:Replace RichTextBox в ContextMenu
<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, чтобы заставить это работать? Это похоже на что-то очень простое, но я просто этого не вижу.
Заранее спасибо.