如何在XAML中填充ContextMenuStrip?
问题描述:
我已使用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没什么特别的和不相关的。
我想创建ContextMenuStrip
的NotifyIcon
在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 Name
和Click
事件处理程序?
答
问题是如何使用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!");
}
你有没有考虑过使用[为WPF hardcodet的本地MotifyIcon库(http://www.hardcodet.net/wpf-notifyicon/comment-页面3)?除非您将它用于其他事情,否则不需要winforms互操作。 –
是的,但不确定它是否足够强大,足以在企业应用程序中使用它。说实话,我不是WPF纯粹主义者,我的应用程序中的一些嵌入式Windows窗体控件 不会让我困惑。 –
如果我的问题的答案是“这是不可能的”,我会坚持解决方案后面的代码(这是微不足道的)。 'NotifyIcon'是我的应用程序中的一小段代码。 –