我正在使用WPF-NotifyIcon,并且正在关注this tutorial,当我将XAML代码放入MainWindow.xaml时它会起作用,但是一旦我转到“从资源创建NotifyIcon”字典“部分停止显示在托盘中。
我有一个Dictionary1.xaml,其中包含以下代码:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tb="http://www.hardcodet.net/taskbar">
<!-- Globally declared notify icon -->
<tb:TaskbarIcon x:Key="MyNotifyIcon"
IconSource="/Notifier;component/assets/icon_16x.ico"
ToolTipText="Notifier" MenuActivation="RightClick" Visibility="Visible" />
</ResourceDictionary>
App.xaml,代码如下:
<Application x:Class="Notifier.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="Dictionary1.xaml" />
</Application.Resources>
</Application>
我只是从本教程的那一部分复制了App类代码。
我做错了什么?为什么图标不显示?在一个相关的说明中,我怎么能有一个没有MainWindow的程序,而只是从任务栏运行(这对于这个控件来说是理想的)。
修改
我从App.xaml中取出了StartupUri并将以下代码放在我的App.xaml.cs中:
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
tb = (TaskbarIcon)FindResource("MyNotifyIcon");
tb.Visibility = Visibility.Visible;
//new MyClassIWantToInstantiate();
}
它完美无缺,但这样做有什么不妥吗?
答案 0 :(得分:2)
如果您想正常使用资源,则应将ResourceDictionary
添加到MergedDictionaries
部分。
示例:
<Application x:Class="Notifier.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
答案 1 :(得分:0)
在我按照https://www.codeproject.com/Articles/36468/WPF-NotifyIcon-2#hello上的教程进行学习时遇到了同样的情况
文本表明您应该在Initapplication()
内实例化taskbarIcon,而这对我不起作用。
来自教程:
private void InitApplication()
{
//initialize NotifyIcon
tb = (TaskbarIcon) FindResource("MyNotifyIcon");
}
但是,当查看包含的示例时,它是在OnStartup覆盖中完成的,这对我来说似乎更有意义。
以下按预期工作。
private TaskbarIcon tb;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//create the notifyicon (it's a resource declared in NotifyIconResources.xaml
tb = (TaskbarIcon)FindResource("MyNotifyIcon");
}