当用户将鼠标悬停在托盘图标上时,我正在利用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仅在启动时才会读取它的值。
答案 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();
}
希望这有帮助