2017-06-06 46 views
0

我已使用NotifyIcon创建了WPF应用程序以在托盘中工作。如何在XAML中填充ContextMenuStrip?

public partial class MainWindow : Window 
{ 
    public NotifyIcon NotifyIcon { get; } = new NotifyIcon 
    { 
     Icon = Properties.Resources.status_on_ico, 
     Visible = true 
    }; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     NotifyIcon.ContextMenuStrip = MyContextMenuStrip; 
     NotifyIcon.Click += NotifyIcon_Click; 
    } 

    private void Window_Closing(object sender, CancelEventArgs e) 
    { 
     e.Cancel = true; 
     WindowState = WindowState.Minimized; 
    } 

    private void NotifyIcon_Click(object sender, EventArgs e) 
    { 
     Show(); 
    } 
} 

主窗口的XAML没什么特别的和不相关的。

我想创建ContextMenuStripNotifyIcon在XAML(我知道如何做它后面的代码,但不想它)。

这是我管理的。

<WindowsFormsHost> 
    <wf:ContextMenuStrip x:Name="MyContextMenuStrip" TopLevel="False"> 
     <wf:ContextMenuStrip.Items> 
      <!-- How to add items here? --> 
     </wf:ContextMenuStrip.Items> 
    </wf:ContextMenuStrip> 
</WindowsFormsHost> 

的问题是如何将项目添加到ContextMenuStrip.Items在XAML NameClick事件处理程序?

+0

你有没有考虑过使用[为WPF hardcodet的本地MotifyIcon库(http://www.hardcodet.net/wpf-notifyicon/comment-页面3)?除非您将它用于其他事情,否则不需要winforms互操作。 –

+0

是的,但不确定它是否足够强大,足以在企业应用程序中使用它。说实话,我不是WPF纯粹主义者,我的应用程序中的一些嵌入式Windows窗体控件 不会让我困惑。 –

+0

如果我的问题的答案是“这是不可能的”,我会坚持解决方案后面的代码(这是微不足道的)。 'NotifyIcon'是我的应用程序中的一小段代码。 –

回答

2

问题是如何使用XAML中的Name和Click事件处理程序将项目添加到ContextMenuStrip.Items?

试试这个:

<WindowsFormsHost> 
    <wf:ContextMenuStrip x:Name="MyContextMenuStrip" TopLevel="False"> 
     <wf:ContextMenuStrip.Items> 
      <wf:ToolStripMenuItem Text="test1" Click="It_Click" /> 
      <wf:ToolStripMenuItem Text="test2" /> 
     </wf:ContextMenuStrip.Items> 
    </wf:ContextMenuStrip> 
</WindowsFormsHost> 

private void It_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("click!"); 
}