2

我们正在使用一些没有 WPF 等价物的 ActiveX 或 windows 窗体控件,所以自然我们使用 WindowsFormsHost 来托管这些控件。我们通常用一些通用控件(例如按钮)来制作一个 UserControl 来实现通用功能。一段 xaml 代码是这样的:

<WindowsFormsHost Name="windowsFormsHost1" >   
    <WindowsFormsHost.ContextMenu>
        <ContextMenu>                    
            <MenuItem Header="_Test1" />
        </ContextMenu>                    
    </WindowsFormsHost.ContextMenu>

    <AxOWC:AxPivotTable x:Name="pivotTable" />        
</WindowsFormsHost>        
....

AxPivotTable 是一个 OWC(办公 Web 组件)控件。在另一个 UserControl 中,我们在 WindowsFormsHost 中添加了一个 ReportViewer。请注意,通常 AxPivotTable 或 ReportViewer 具有其默认上下文菜单,即使我没有添加任何 ContextMenu 项目。

到目前为止,我的自定义 ContextMenu 还没有显示(仍然显示默认的)。感谢这个问题,我发现我仍然需要在代码隐藏中捕获鼠标按下事件并设置

windowsFormsHost1.ContextMenu.IsOpen = True

显示上下文菜单(虽然很奇怪)。

现在我的问题是,现在只有这个 Test1 ContextMenu 在这里。默认的 ContextMenu 将不再显示。正如我所提到的,我们想要的是在这些默认上下文菜单之上添加自定义。

4

1 回答 1

0

对于您上面的示例,这将是我的工作“解决方案”,我不知道您是否也需要为您的WindowsFormsHost. 希望对你有帮助

XAML

<Window x:Class="tete.MainWindow"
        xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns="http://schemas.microsoft.com/netfx/2009/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
    <Grid>
        <av:WindowsFormsHost Name="myWFH">
            <wf:ComboBox Name="myCBox">
            <wf:ComboBox.ContextMenu>
                <wf:ContextMenu>
                    <wf:ContextMenu.MenuItems>
                        <wf:MenuItem Text="somet"/>
                    </wf:ContextMenu.MenuItems>
                </wf:ContextMenu>
            </wf:ComboBox.ContextMenu>
        </wf:ComboBox>

    </Grid>
</Window>

代码隐藏

using System.Windows;
using System.Windows.Controls;

namespace tete
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        var child = myWFH.Child as System.Windows.Forms.ComboBox;
        child.ContextMenu.MenuItems.Add(new System.Windows.Forms.MenuItem("my new menuitem"));
        }
    }
}

编辑 我希望现在它适合您的需求:) 我正确理解您想要的 ToDo

于 2013-03-14T11:07:25.097 回答