title: WPF Tooltip that works with touch
body: <p>I have a WPF application where tooltip is bound to a viewmodel, and all is great when I hover over my control and wait for the tooltip.</p>
  
  <p>To support mouseless devices, I would like to show the same tooltip, when "clicking" my control.</p>
  
  <p>If I implement a MouseDown handler that sets the tooltip's <code>IsOpen = true</code>, the tooltip is shown, but binding has not been evaluated, unless I hover and wait first.</p>
  
  <p>XAML:</p>
  
  <pre><code>&lt;Window x:Class="TooltipApplication.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:local="clr-namespace:TooltipApplication"
          mc:Ignorable="d"
          Title="MainWindow" Height="350" Width="525"&gt;
      &lt;Grid&gt;
          &lt;Image Source="http://www.brockmann-consult.de/beam/doc/help/visat/images/icons/Help22.png" MouseDown="Image_MouseDown" Stretch="None" MouseLeave="Image_MouseLeave"&gt;
              &lt;Image.ToolTip&gt;
                  &lt;ToolTip&gt;
                      &lt;TextBlock Text="{Binding Hint}"/&gt;
                  &lt;/ToolTip&gt;
              &lt;/Image.ToolTip&gt;
          &lt;/Image&gt;
  
      &lt;/Grid&gt;
  &lt;/Window&gt;
  </code></pre>
  
  <p>Code behind:</p>
  
  <pre><code>using System.Windows;
  using System.Windows.Controls;
  using System.Windows.Input;
  
  namespace TooltipApplication
  {
      /// &lt;summary&gt;
      /// Interaction logic for MainWindow.xaml
      /// &lt;/summary&gt;
      public partial class MainWindow : Window
      {
          public MainWindow()
          {
              InitializeComponent();
              DataContext = this;
          }
  
          public string Hint { get { return "This is my hint"; } }
  
  
          private void Image_MouseDown(object sender, MouseButtonEventArgs e)
          {
              var tooltip = (sender as FrameworkElement).ToolTip;
              if (tooltip is ToolTip)
                  ((ToolTip)tooltip).IsOpen = true;
          }
  
          private void Image_MouseLeave(object sender, MouseEventArgs e)
          {
              var tooltip = (sender as FrameworkElement).ToolTip;
              if (tooltip is ToolTip)
                  ((ToolTip)tooltip).IsOpen = false;
          }
      }
  }
  </code></pre>
  
  <p>Using the code above, click the image before the tooltip timer elapses, or run it on a touch device.</p>
  
  <p>Placing a breakpoint in the Hint getter also proves, that it is not called unless you wait for the tooltip timer.</p>
  
  <p>How can I force the tooltip to evaluate its binding, and then show?</p>