Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将新的contextmenu项添加到WindowsFormsHost,它在WPF中具有默认contextmenu_Wpf_Contextmenu_Windowsformshost - Fatal编程技术网

将新的contextmenu项添加到WindowsFormsHost,它在WPF中具有默认contextmenu

将新的contextmenu项添加到WindowsFormsHost,它在WPF中具有默认contextmenu,wpf,contextmenu,windowsformshost,Wpf,Contextmenu,Windowsformshost,我们正在使用一些ActiveX或windows窗体控件,这些控件没有WPF等效项,因此我们自然使用WindowsFormsHost来承载这些控件。我们通常使用一些通用控件(如按钮)来实现通用功能,从而生成一个UserControl。一段xaml代码如下所示: <WindowsFormsHost Name="windowsFormsHost1" > <WindowsFormsHost.ContextMenu> <ContextMenu&g

我们正在使用一些ActiveX或windows窗体控件,这些控件没有WPF等效项,因此我们自然使用WindowsFormsHost来承载这些控件。我们通常使用一些通用控件(如按钮)来实现通用功能,从而生成一个UserControl。一段xaml代码如下所示:

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

    <AxOWC:AxPivotTable x:Name="pivotTable" />        
</WindowsFormsHost>        
....
显示上下文菜单(虽然很奇怪)

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

这将是我的工作“解决方案”,对于上面的示例,我不知道您是否也需要它来处理
WindowsFormsHost
中的子元素。希望这对你有帮助

XAML 编辑
我希望现在它符合您的需要:)而且我正确地理解了您要做的事情

您是否能够在
窗口窗体shost1
中获取
上下文菜单
对象?所以你可以做
\u yourContextMenu\u.Items.Add(newMenuItem)
@WiiMaxx,这实际上是我不理解的部分。在我设置I set IsOpen=True的事件处理程序中,我可以看到ContextMenu实际上只包含自定义项,而不是控件本身提供的默认菜单。因此,我不知道如何获得这些默认菜单,因此无法添加它们(因为控件不在WPF程序集中,我甚至不知道是否可以只使用Items.add来添加它们而不进行转换)。换句话说,我的自定义CM将覆盖默认值,因为它们位于不同的级别,并且只有在我没有自定义CM的情况下,才会弹出默认值。感谢您的回复,但是您试图用此代码解决的问题是什么?可能是我没有清楚地描述我的问题。AxOWC:AxPivotTable(以及我们包装在WindowsFormsHost中的其他WinForms控件)有其默认的ContextMenu,它的类型是System.Windows.Forms.ContextMenu,而不是WPF类型。但是现在我想让自定义上下文菜单项与默认项共存,这样用户就有了一个增强的上下文菜单。但是,我的问题代码,自定义菜单将覆盖/阴影默认上下文菜单,这不是我想要的。哦,看起来我错过了这一部分:o)我将对此进行挖掘是的,谢谢。关于结果,我只想说几句话:我在mouse-down事件的事件处理程序中使用myWFH.ContextMenu.IsOpen=true,您可以在构造函数中这样做。你的代码基本上与我的文章做的事情相似,除了一件事:如果我运行你的代码,自定义上下文菜单将在构建UserControl/窗口时显示一次,仍然隐藏默认上下文菜单,稍后当我右键单击默认上下文菜单时,再次显示自定义上下文菜单。相反,我的代码总是隐藏默认上下文菜单。这两种方法都不能产生预期的效果result@tete我希望现在它是您所需要的,如果它不适合云计算,请告诉我什么是汇编
AxOWC
,以便我可以深入挖掘;)非常感谢你的帮助。我对控件仍然有一些问题,但稍后我会再与您联系。
windowsFormsHost1.ContextMenu.IsOpen = True
<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"));
        }
    }
}