我正在使用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
以这种方式调用方法是不可能的?为什么呢?
答案 0 :(得分:2)
以下是您需要的简单RelayCommand的代码
public class RelayCommand : ICommand
{
private Action<object> action;
public RelayCommand(Action<object> action)
{
this.action = action;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
action(parameter);
}
public event EventHandler CanExecuteChanged;
}
然后,就像其他答案一样
tbi.DoubleClickCommand =new RelayCommand(_ => Recover(tbi));
答案 1 :(得分:1)
实际上,DoubleClickCommand
的类型为ICommand
。
您需要将其设置为RelayCommand
,这是ICommand
的子类型,以便进行编译,如:
tbi.DoubleClickCommand =new RelayCommand(param => Recover(tbi));
您可以阅读有关中继命令on this MSDN link
的更多信息