【问题标题】:WPF NotifyIcon not firing MouseEnter event (How to update NotifyIcon viewmodel when tooltip is displayed)WPF NotifyIcon 未触发 MouseEnter 事件(显示工具提示时如何更新 NotifyIcon 视图模型)
【发布时间】:2015-04-14 11:54:38
【问题描述】:

当用户将鼠标悬停在托盘图标上时,我正在使用 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();
}

但是,当用户将鼠标悬停在托盘图标上时(就在实际显示工具提示时),我想更新任务栏的视图模型。如何做到这一点? TrayIcon 的所有事件(如 MouseEnter、TooltipDisplayed 等)都不会触发,因此 ViewModel 只会在启动时读取它的值。

【问题讨论】:

    标签: c# wpf mvvm notifyicon


    【解决方案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();
        }
    

    希望对你有帮助

    【讨论】:

    • 看来,这种方法确实有问题。它没有在 Hardcodet.Wpf.TaskbarNotification 的最新版本中触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多