Silverlight 4:如何在键盘焦点上显示工具提示(修订)
Posted
技术标签:
【中文标题】Silverlight 4:如何在键盘焦点上显示工具提示(修订)【英文标题】:Silverlight 4: how to show ToolTip on keyboard focus (revised) 【发布时间】:2011-09-27 18:03:57 【问题描述】:我原来的问题:
是否有一种简单的方法可以在项目获得键盘焦点时显示工具提示,而不仅仅是鼠标悬停?我们有一个带有工具提示的项目列表,用户可能会通过标签浏览这些项目,并且期望的行为是随后也显示工具提示。
添加了示例 XAML。带有 Tooltip 集的 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: Show and persist ToolTip for a Textbox based on the cursor 中的信息以及 Anthony 的 cmets,我在 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;
这似乎可行,但 ttip 始终为空。帮忙?
【问题讨论】:
【参考方案1】:“简单”是主观术语。是的,这很容易。在您附加ToolTip
的同一UI 元素上,您可以挂钩GotFocus
和LostFocus
事件处理程序,将使用ToolTipService.GetToolTip
获取工具提示并将IsOpen
设置为true
和false
分别。
【讨论】:
谢谢。我只是 xaml 的人,所以可以使用更多的帮助。 @dex3703:这太可惜了,因为 *** 是开发人员的地方。作为一个“Xaml 专家”,如果您在问题中包含一些 Xaml 会有所帮助,我可以将其用作更详细答案的基础。 我在一个大型团队中,并试图在代码完成之前帮助不堪重负的开发人员。我已经离开几个月了,这无济于事。 :) Anthony -- 刚刚理解了您的建议并在上面发布了代码。它总是空的——我做错了什么?谢谢!【参考方案2】:缺少的部分是在 XAML 中定义工具提示,以便我们可以访问 Tooltip 元素。
<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;
【讨论】:
谢谢!我现在无法检查,该项目早已不复存在,但我相信它会在未来出现。以上是关于Silverlight 4:如何在键盘焦点上显示工具提示(修订)的主要内容,如果未能解决你的问题,请参考以下文章
如何滚动焦点组件以查看在 React JS 中显示的屏幕键盘?
如何通过在焦点集中时将其移动到键盘顶部/视图中心来突出显示滚动视图中的焦点 UITextField
不应在其焦点上显示软键盘的 Xamarin.Forms 条目