【发布时间】:2016-05-11 15:05:06
【问题描述】:
我正在使用WPF NotifyIcon,实际上我正在尝试学习如何在托盘中最小化窗口后显示窗口。因此,当用户双击该图标时,该窗口应该会再次出现。实际上我已经创建了这段代码:
private void MetroWindow_StateChanged(object sender, EventArgs e)
{
TaskbarIcon tbi = new TaskbarIcon();
tbi.DoubleClickCommand = Recover(tbi);
switch (WindowState)
{
case WindowState.Minimized:
Visibility = Visibility.Hidden;
tbi.Visibility = Visibility.Visible;
break;
}
}
private void Recover(TaskbarIcon tbi)
{
tbi.Visibility = Visibility.Hidden;
Visibility = Visibility.Visible;
}
当我最小化窗口时,您如何看到托盘中的图标出现。这工作得很好。我已经像这样声明了图标:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test.Utils.Resources.UIDictionary"
xmlns:tb="http://www.hardcodet.net/taskbar">
<tb:TaskbarIcon x:Key="NotifyIcon"
IconSource="/Utils/Images/Test.ico"
ToolTipText="hello world" />
</ResourceDictionary>
现在的问题是在这一行:tbi.DoubleClickCommand = Recover(tbi); 我得到这个错误:
无法在 System.Windows.Input.ICommand 中转换类型 void
不能这样调用方法吗?为什么?
【问题讨论】:
-
我建议您通读 WPF,尤其是 MVVM 和命令模式。如果你把它当成 WinForms,你也可以使用 WinForms。
-
@nvoigt 好吧,实际上我对 wpf 有点生疏了
-
解决实际问题:
DoubleClickCommand是ICommand。您正在调用Recover,它返回一个void并试图将该 void 分配给某些东西(这永远没有意义)。此外,为此,您创建了一个新的TaskbarIcon,它始终位于MetroWindow_StateChanged函数的本地。它从未添加到 UI 中,因此您对它所做的一切都不重要。我不熟悉 Metro 应用程序,因此我不确定如何从您的 UI 中获取您实际需要的TaskbarIcon。