Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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
C# 有没有办法将Controls.ContextMenu转换为Forms.ContextMenu?_C#_Wpf_Winforms_Xaml_Contextmenu - Fatal编程技术网

C# 有没有办法将Controls.ContextMenu转换为Forms.ContextMenu?

C# 有没有办法将Controls.ContextMenu转换为Forms.ContextMenu?,c#,wpf,winforms,xaml,contextmenu,C#,Wpf,Winforms,Xaml,Contextmenu,我在WPF XAML中定义了一个上下文菜单,如下所示: <Window.Resources> <ContextMenu x:Key="MyMenu"> <MenuItem Header="{x:Static props:Resources.MenuItem1}"/> </ContextMenu> </Window.Resources> 因为它们显然不是相同的ContextMenuclass。是否有一种方

我在WPF XAML中定义了一个上下文菜单,如下所示:

<Window.Resources>
    <ContextMenu x:Key="MyMenu">
        <MenuItem Header="{x:Static props:Resources.MenuItem1}"/>
    </ContextMenu>
</Window.Resources>
因为它们显然不是相同的
ContextMenu
class。是否有一种方法可以简单地从
控件.ContextMenu
转换为
表单.ContextMenu


我不希望通过手动打开XAML中定义的上下文菜单来处理notify图标的右键单击鼠标事件。原因是我怀疑当用户使用键盘上的上下文菜单键时,不会发送右键单击鼠标事件

否-这些控件适用于完全不同的平台(Winforms与WPF)。两者之间没有“转换”


要么使用支持WPF的,要么编写一个“转换”,翻译WPF上下文菜单中的项目,并将它们添加到Winforms上下文菜单中。

因此,我想任何人都会好奇。我最终实现了一个转换器

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

namespace MyApp
{
    class NotifyIconEx
    {
        #region Data
        private System.Windows.Forms.NotifyIcon _notifyIcon = new System.Windows.Forms.NotifyIcon();
        #endregion // Data

        #region Properties
        public Icon Icon
        {
            get { return _notifyIcon.Icon; }
            set { _notifyIcon.Icon = value; }
        }
        public ContextMenu ContextMenu
        {
            private get { return null; }
            set
            {
                _notifyIcon.ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
                foreach (var item in value.Items)
                {
                    if (item is MenuItem)
                    {
                        var menuItem = item as MenuItem;
                        var toolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                        toolStripMenuItem.Click += (s, e) => menuItem.RaiseEvent(new System.Windows.RoutedEventArgs(MenuItem.ClickEvent));
                        toolStripMenuItem.Text = menuItem.Header as string;
                        _notifyIcon.ContextMenuStrip.Items.Add(toolStripMenuItem);
                    }
                    else if (item is Separator)
                    {
                        _notifyIcon.ContextMenuStrip.Items.Add(new System.Windows.Forms.ToolStripSeparator());
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
            }
        }
        public bool Visible
        {
            get { return _notifyIcon.Visible; }
            set { _notifyIcon.Visible = value; }
        }
        #endregion // Properties

        #region API
        public void ShowBalloonTip(int timeout)
        {
            _notifyIcon.ShowBalloonTip(timeout);
        }
        public void ShowBalloonTip(int timeout, string tipTitle, string tipText, System.Windows.Forms.ToolTipIcon tipIcon)
        {
            _notifyIcon.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon);
        }
        #endregion // API
    }
}
using System;
using System.Drawing;
using System.Windows.Controls;

namespace MyApp
{
    class NotifyIconEx
    {
        #region Data
        private System.Windows.Forms.NotifyIcon _notifyIcon = new System.Windows.Forms.NotifyIcon();
        #endregion // Data

        #region Properties
        public Icon Icon
        {
            get { return _notifyIcon.Icon; }
            set { _notifyIcon.Icon = value; }
        }
        public ContextMenu ContextMenu
        {
            private get { return null; }
            set
            {
                _notifyIcon.ContextMenuStrip = new System.Windows.Forms.ContextMenuStrip();
                foreach (var item in value.Items)
                {
                    if (item is MenuItem)
                    {
                        var menuItem = item as MenuItem;
                        var toolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
                        toolStripMenuItem.Click += (s, e) => menuItem.RaiseEvent(new System.Windows.RoutedEventArgs(MenuItem.ClickEvent));
                        toolStripMenuItem.Text = menuItem.Header as string;
                        _notifyIcon.ContextMenuStrip.Items.Add(toolStripMenuItem);
                    }
                    else if (item is Separator)
                    {
                        _notifyIcon.ContextMenuStrip.Items.Add(new System.Windows.Forms.ToolStripSeparator());
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                }
            }
        }
        public bool Visible
        {
            get { return _notifyIcon.Visible; }
            set { _notifyIcon.Visible = value; }
        }
        #endregion // Properties

        #region API
        public void ShowBalloonTip(int timeout)
        {
            _notifyIcon.ShowBalloonTip(timeout);
        }
        public void ShowBalloonTip(int timeout, string tipTitle, string tipText, System.Windows.Forms.ToolTipIcon tipIcon)
        {
            _notifyIcon.ShowBalloonTip(timeout, tipTitle, tipText, tipIcon);
        }
        #endregion // API
    }
}