簡體   English   中英

無法將void轉換為ICommand

[英]Cannot convert void to ICommand

我正在使用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

不可能以這種方式調用方法嗎? 為什么?

這是您需要的簡單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));

實際上, DoubleClickCommand的類型為ICommand

您需要將其設置為ICommand子類型RelayCommand ,以便像這樣進行編譯:

 tbi.DoubleClickCommand =new RelayCommand(param => Recover(tbi));

您可以在此MSDN鏈接上閱讀有關中繼命令的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM