2014-04-13 43 views
4

如何顯示代碼隱藏工具提示?下面的代碼更好地定義了我的問題。顯然,我不希望代碼檢查鼠標位置等,只是如何顯示工具提示。如何顯示WPF代碼中的工具提示

private void UIElement_OnMouseMove(object sender, MouseEventArgs e) 
{ 
    // if mouse position equals certain coordinates show the tooltip 
} 

回答

8

嘗試這樣的:

if (control.ToolTip != null) 
{ 
    // Main condition 
    if (control.ToolTip is ToolTip) 
    { 
     var castToolTip = (ToolTip)control.ToolTip; 
     castToolTip.IsOpen = true; 
    } 
    else 
    { 
     toolTip.Content = control.ToolTip; 
     toolTip.StaysOpen = false; 
     toolTip.IsOpen = true; 
    } 
} 

Main condition必要的,因爲ToolTip的控制可以通過兩種方法進行設置:

First approach

<Button Name="TestButton" 
     ToolTip="TestToolTip" /> 

這種方法是 最常見的。在這種情況下,工具提示的內容將反對,而不是鍵入ToolTip

Second approach

<Button Name="TestButton" 
     Content="Test"> 

    <Button.ToolTip> 
     <ToolTip>TestToolTip</ToolTip> 
    </Button.ToolTip> 
</Button> 

是一樣的:

<Button Name="TestButton" 
     Content="Test"> 

    <Button.ToolTip> 
     TestToolTip 
    </Button.ToolTip> 
</Button> 

在這種情況下,工具提示的內容類型將是Tooltip。請注意,在第二種情況下,對象會自動填充行TestToolTip上的工具提示對象,因此此方法會稍微慢一點。

因此,需要此項檢查,以避免異常,當我們試圖給工具提示的ToolTip類型這裏的內容:

toolTip.Content = control.ToolTip; 

下面是一個完整的例子:

XAML

<Grid> 
    <Button Name="TestButton" 
      Width="100" 
      Height="25" 
      Content="Test" 
      ToolTip="TestToolTip" /> 

    <Button Name="ShowToolTip" 
      VerticalAlignment="Top" 
      Content="ShowToolTip" 
      Click="ShowToolTip_Click" /> 
</Grid> 

Code-behind

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void ShowToolTip_Click(object sender, RoutedEventArgs e) 
    { 
     var toolTip = new ToolTip(); 

     if (TestButton.ToolTip != null) 
     { 
      if (TestButton.ToolTip is ToolTip) 
      { 
       var castToolTip = (ToolTip)TestButton.ToolTip; 
       castToolTip.IsOpen = true; 
      } 
      else 
      { 
       toolTip.Content = TestButton.ToolTip; 
       toolTip.StaysOpen = false; 
       toolTip.IsOpen = true; 
      } 
     } 
    } 
} 
+0

對不起,但這給了我nullrefrenceexception。 – Vahid

+0

@Vahid:請參閱我的編輯,我添加完整的示例。 –

+0

感謝它爲按鈕工作,但它不是在Canvas上的MouseMove事件工作 – Vahid