WPF - 如何在禁用选项卡上的“触摸”屏幕上显示工具提示?

时间:2014-01-21 06:32:40

标签: wpf xaml tooltip

我试图找出如何仅在禁用选项卡时显示工具提示,但是在鼠标/触摸事件以及鼠标悬停时。现在,当我将鼠标悬停在桌面显示器上的禁用选项卡上时,我正在努力显示工具提示。但是,在我的触摸屏设备上,触摸标签显示工具尖端约20ms。这是因为鼠标按下事件似乎清除了工具提示。这是我到目前为止所做的工作:

<TabItem Name="BiosTab" IsEnabled="{Binding Path=EnableAllTabs}" 
                         Header="Peripherals/BIOS" Height="64" Style="{StaticResource GlowTabItem}"
                         ToolTip="{Binding Path=TabToolTip}" ToolTipService.ShowOnDisabled="True"
                         ToolTipService.InitialShowDelay="0" PreviewMouseLeftButtonDown="BiosTab_MouseLeftButtonDown">

快速背景: 我们有3个选项卡,每个选项卡显示可按类别安装的文件列表。必须先安装必需的文件类别,然后才能安装其他组中的其他文件。因此,在安装或选择安装这些项目之前,其他选项卡将保持禁用状态。为了方便用户,我希望当用户尝试激活其中一个禁用选项卡时显示工具提示。

不幸的是,在禁用选项卡时不会调用PreviewMouseLeftButtonDown事件,因此该部分没有帮助。

任何想法都会非常感激。

由于

1 个答案:

答案 0 :(得分:1)

您可能想要查找WPF Toast通知库。

同时,一个简单的解决方案可能就是:

  • 保持启用TabItems并处理CanExecute行为。
  • 根据禁用的样式创建新的TabItem样式(您可能需要 虽然区分了它们。
  • 处理ToolTip打开和关闭按钮*或鼠标离开。
private Timer Timer { get; set; }
private ToolTip ToolTip { get; set; }

{
    ...
    Timer = new Timer();
    Timer.Interval = 3000;
    Timer.Elapsed += OnTimerElapsed;

    BiosTab.MouseLeave += OnMouseLeave;
    BiosTab.MouseLeftButtonUp += OnMouseButtonUp;
}

public void OnMouseLeave(object sender, MouseEventArgs e)
{
    CloseToolTip();
}

public void OnMouseButtonUp(object sender, MouseButtonEventArgs e)
{
    Timer.Stop();
    ToolTip = ((ToolTip)((Control)sender).ToolTip);
    ToolTip.IsOpen = true;
    Timer.Start();
}

private void CloseToolTip()
{
    if (ToolTip != null)
    {
        ToolTip.IsOpen = false;
        ToolTip = null;
    }
}

private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
    Timer.Stop();
    Application.Current.Dispatcher.BeginInvoke((Action)CloseToolTip, DispatcherPriority.Send);
}