WPF NotifyIcon未触发MouseEnter事件(如何在显示工具提示时更新NotifyIcon视图模型)

时间:2015-04-13 23:41:19

标签: c# wpf mvvm notifyicon

当用户将鼠标悬停在托盘图标上时,我正在利用WPF NotifyIcon库显示托盘图标和工具提示。我将Tooltip定义为UserControl:

<tb:TaskbarIcon  x:Class="MyAwesomeApp.TrayIconUserControl">
    <tb:TaskbarIcon.TrayToolTip>
       <Grid>
          <TextBlock Text="{Binding TextFromViewModel}" />
       </Grid>
    </tb:TaskbarIcon.TrayToolTip>
</tb:TaskbarIcon>

我在主ViewModel中创建它:

private TaskbarIcon TrayIcon;

public void CreateTrayIcon()
{
  TrayIcon = new TrayIconUserControl();
}

但是,当用户将鼠标悬停在托盘图标上时(当实际显示工具提示时),我想更新taksbar的viewmodel。怎么实现呢?没有TrayIcon的事件,如MouseEnter,TooltipDisplayed等正在触发,因此ViewModel仅在启动时才会读取它的值。

1 个答案:

答案 0 :(得分:1)

应该像在XAML中调用PreviewTrayToolTipOpen事件一样简单:

<tb:TaskbarIcon  x:Class="MyAwesomeApp.TrayIconUserControl"
                 PreviewTrayToolTipOpen="PreviewTrayToolTipOpen">
    <tb:TaskbarIcon.TrayToolTip>
       <Grid>
          <TextBlock Text="{Binding TextFromViewModel}" />
       </Grid>
    </tb:TaskbarIcon.TrayToolTip>
</tb:TaskbarIcon>

或者在你的代码隐藏中:

TrayIcon = new TrayIconUserControl();
TrayIcon.PreviewTrayToolTipOpen += PreviewTrayToolTipOpen;

这两个方法具有相同的处理程序签名:

    private void PreviewTrayToolTipOpen(object sender, RoutedEventArgs routedEventArgs)
    {
        throw new NotImplementedException();
    }

希望这有帮助