Silverlight 4:如何在键盘焦点上显示工具提示(修订)



我原来的问题:

是否有一种简单的方法来显示工具提示,当一个项目得到键盘焦点,而不仅仅是鼠标在上面?我们有一个带有工具提示的项目列表,用户可能会选择tab键,并且期望的行为是工具提示也显示在列表中。

添加示例XAML。带有工具提示集的HyperlinkButton也需要键盘焦点。

    <DataTemplate x:Key="OfferingItemDT">
        <HyperlinkButton Command="{Binding Path=NavigateToLinkCommand}" ToolTipService.ToolTip="{Binding Tooltip}">                
             <Grid x:Name="gOfferingButtonRoot" Width="275" MaxHeight="78" Margin="5,3">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="40"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Image x:Name="imgServiceOfferingIcon" 
                Grid.RowSpan="2"            
                VerticalAlignment="Top" 
                Source="{Binding Path=Image, Converter={StaticResource ByteArrayToImageConverter}}" 
                Stretch="UniformToFill" 
                Margin="2,10,0,0"
                MaxHeight="32" MaxWidth="32"
                />
                <TextBlock x:Name="txbOfferingTitle"
                    Grid.Column="1"
                    Grid.Row="0"
                    Text="{Binding Title}"                               
                    TextWrapping="Wrap"                                        
                    Style="{StaticResource OfferingTileTitleText}"/>
                <TextBlock x:Name="txbOfferingDesc"
                Grid.Column="1"
                Grid.Row="1"
                Style="{StaticResource OfferingTileBodyText}"
                Text="{Binding BriefDescription}" />
             </Grid>
        </HyperlinkButton>
    </DataTemplate>             

更新:基于WPF中的信息:显示和保存基于光标的文本框的工具提示以及Anthony的注释,我在GotFocus事件处理程序中尝试了以下代码:

        private void showTooltip(object sender, RoutedEventArgs e)
    {
        HyperlinkButton hb = new HyperlinkButton();
        ToolTip ttip = new ToolTip();

        hb = sender as HyperlinkButton;

        ttip = ToolTipService.GetToolTip(hb) as ToolTip;
        ttip.IsOpen = true;            
    }

这看起来是可行的,但是tip总是null。帮助吗?

"Easy"是一个主观名词。是的,很简单。在您附加ToolTip的同一UI元素上,您可以挂钩GotFocusLostFocus事件处理程序,将使用ToolTipService.GetToolTip获取工具提示并分别将IsOpen设置为truefalse

缺少的部分是在XAML中定义工具提示,以便我们可以访问工具提示元素。

<HyperlinkButton MouseLeftButtonUp="showTooltip">
  <ToolTipService.ToolTip>
    <ToolTip>
      <TextBlock Text="My tooltip text"/>
    </ToolTip>
  </ToolTipService.ToolTip>
  <!-- ... -->
</HyperlinkButton>

背后的代码
private void showTooltip(object sender, RoutedEventArgs e)
{
  FrameworkElement frameworkElement = (FrameworkElement)sender;
  ToolTip tooltip = ToolTipService.GetToolTip(frameworkElement) as ToolTip;
  if (tooltip != null)
  {
    tooltip.IsOpen = true;
    frameworkElement.MouseLeave += new MouseEventHandler(frameworkElement_MouseLeave);
  }
}
static void frameworkElement_MouseLeave(object sender, MouseEventArgs e)
{
  FrameworkElement frameworkElement = (FrameworkElement)sender;
  frameworkElement.MouseLeave -= new MouseEventHandler(frameworkElement_MouseLeave);
  ToolTip tooltip = ToolTipService.GetToolTip(frameworkElement) as ToolTip;
  if (tooltip != null)
  {
    tooltip.IsOpen = false;
  }
}

相关内容

  • 没有找到相关文章

最新更新