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

Silverlight 4:如何在键盘焦点上显示工具提示(修订版),silverlight,event-handling,keyboard,focus,tooltip,Silverlight,Event Handling,Keyboard,Focus,Tooltip,我原来的问题是: 当一个项目获得键盘焦点而不仅仅是鼠标悬停时,是否有一种简单的方式显示工具提示?我们有一个带有工具提示的项目列表,用户可能会通过选项卡进行查看,并且所需的行为是也显示工具提示 添加了示例XAML。带有工具提示集的HyperlinkButton也需要键盘焦点 <DataTemplate x:Key="OfferingItemDT"> <HyperlinkButton Command="{Binding Path=NavigateToLink

我原来的问题是:

当一个项目获得键盘焦点而不仅仅是鼠标悬停时,是否有一种简单的方式显示工具提示?我们有一个带有工具提示的项目列表,用户可能会通过选项卡进行查看,并且所需的行为是也显示工具提示

添加了示例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>             

这似乎是可行的,但ttip始终为空。帮助?

“容易”是一个主观术语。是的,很容易。在附加
工具提示的同一UI元素上,您可以将
GotFocus
LostFocus
事件处理程序挂接,事件处理程序将使用
ToolTip.GetToolTip
获取工具提示,并将
IsOpen
分别设置为
true
false

缺少的部分用于定义XAML中的工具提示,以便我们可以访问tooltip元素

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

谢谢我只是xaml的人,所以需要更多的帮助。@dex3703:这太可惜了,因为Stackoverflow是开发人员的地方。作为一个“Xaml的家伙”,如果你在你的问题中加入一些Xaml,我可以将其作为更详细答案的基础,这会有所帮助。我是一个大型团队的成员,正在努力在代码完成之前帮助那些不知所措的开发人员。我已经离开几个月了,这也没什么帮助。:)Anthony——刚刚理解了你的建议,并发布了上面的代码。它总是空的——我做错了什么?谢谢谢谢我现在无法检查这个项目,而且这个项目早就结束了,但我相信它将来会出现。
<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;
  }
}