2014-01-21 30 views
1

我想弄清楚如何让工具提示只在禁用选项卡时显示,但在鼠标/触摸事件以及鼠标悬停时显示。现在,当我将鼠标悬停在桌面监视器上的禁用选项卡上时,我的工作就是显示工具提示。但是,在我的触摸屏设备上,触摸标签显示约20ms的工具提示。这是因为鼠标放下事件似乎清除了工具提示。以下是我迄今为止的工作:WPF - 如何在禁用选项卡上的“触摸”屏幕上显示工具提示?

<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

您可能需要查找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); 
} 
+0

谢谢。我确实相信这是唯一的方法。我真的希望有一种方法来在控制被禁用时冒泡事件。但所有搜索都表明,没有简单的方法(如ToolTipService的“ShowOnDisabled”属性的属性)。我很感谢你的示例代码。我将使用它或类似的东西来解决我的问题。 –