FlowDocumentReader的ContextMenu中有两个菜单项:“复制”和“全选”。我想给它添加一个额外的MenuItem,并且已经尝试过了:
private void FlowDocumentReader_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
flowDocumentReader.ContextMenu.Items.Clear();
MenuItem menuItem = new MenuItem();
menuItem.Header = "Test";
flowDocumentReader.ContextMenu.Items.Add(menuItem);
}此外,我还尝试了以下内容:
private void FlowDocumentReader_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
MenuItem menuItem = new MenuItem();
menuItem.Header = "Test";
flowDocumentReader.ContextMenu.Items.Add(menuItem);
}其中,我没有清除上下文菜单中的项,并尝试将其追加。这两种方法都不起作用。
我可以像这样创建我自己的菜单:
private void FlowDocumentReader_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
MenuItem menuItem = new MenuItem();
menuItem.Header = "Test";
flowDocumentReader.ContextMenu.Items.Add(menuItem);
e.Handled = true;
ContextMenu menu = new ContextMenu();
MenuItem a = new MenuItem();
a.Header = "A";
menu.Items.Add(a);
MenuItem b = new MenuItem();
b.Header = "B";
menu.Items.Add(b);
flowDocumentReader.ContextMenu.Items.Clear();
flowDocumentReader.ContextMenu = menu;
menu.IsOpen = true;
}这将显示出来,但我想要的是复制和选择所有菜单项以及A和B。
想法?
发布于 2011-02-15 21:25:58
我得到的解决方案是简单地在新菜单上重新创建这些MenuItems,并取消通常显示的内置ContextMenu的显示。有许多内置的ApplicationCommands可以合并到您自己的自定义ContextMenu中,并且实现起来非常简单。
假设我有一个从某个方法GetContextMenu()创建的ContextMenu,下面的事件处理程序拒绝打开内置的ContextMenu,代之以调用GetContextMenu()返回的ContextMenu,并添加复制命令(Select All与此类似)。
private void flowDocumentReader_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
e.Handled = true; // keeps the built-in one from opening
ContextMenu myMenu = GetContextMenu();
MenuItem copyMenuItem = new MenuItem();
copyMenuItem.Command = ApplicationCommand.Copy;
copyMenuItem.CommandTarget = myFlowDocument;
myMenu.Items.Add(copyMenuItem);
ShowMenu(myMenu);
}
private void ShowMenu(ContextMenu menu)
{
menu.Placement = PlacementMode.MousePoint;
menu.PlacementRectangle = new Rect(0.0, 0.0, 0.0, 0.0);
menu.IsOpen = true;
}发布于 2012-04-03 10:13:35
也可以在FlowDocument的xaml中执行此操作。
<FlowDocument.ContextMenu>
<ContextMenu>
<MenuItem Header="{Resx Copy}" Command="Copy"/>
<MenuItem Header="{Resx SelectAll}" Command="SelectAll"/>
<MenuItem Header="{Resx CustomCommand}" Command="{Binding CustomCommand}"/>
</ContextMenu>
</FlowDocument.ContextMenu>(得益于Grant Frisken的Resx Extension,标题可以方便地本地化) :)
如果需要将其应用于许多FlowDocuments,您还可以在某个地方以默认样式定义它:
<Style TargetType="FlowDocument">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="{Resx Copy}" Command="Copy"/>
<MenuItem Header="{Resx SelectAll}" Command="SelectAll"/>
<MenuItem Header="{Resx CustomCommand}" Command="{Binding CustomCommand}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>https://stackoverflow.com/questions/4965458
复制相似问题