1

我正在使用WPF-NotifyIcon,并且正在关注 本教程,当我将 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();
    }

它工作得很好,但是这样做有什么问题吗?

4

2 回答 2

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>
于 2013-09-03T01:00:33.797 回答
0

当我遵循https://www.codeproject.com/Articles/36468/WPF-NotifyIcon-2#hello上的教程时遇到了同样的问题

文本表明您应该实例化您的 taskbarIcon,Initapplication()其中对我不起作用。

从教程:

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");
}
于 2018-10-31T03:42:59.007 回答