Sco*_*son 4 xaml tooltip windows-runtime winrt-xaml windows-store-apps
在 Windows 应用商店应用程序中,我有以下 TextBlock:
<TextBlock Text="Seriously long text for the purpose of showing tooltip"
TextTrimming="CharacterEllipsis" />
Run Code Online (Sandbox Code Playgroud)
当文本太长而无法在没有省略号的情况下显示时,如何自动显示工具提示?
首先,创建一个附加属性以启用自动工具提示:
public static class TextBlockUtils {
public static readonly DependencyProperty AutoTooltipProperty =
DependencyProperty.RegisterAttached ("AutoTooltip", typeof (bool), typeof (TextBlockUtils),
new PropertyMetadata (false, OnAutoTooltipPropertyChanged));
public static void SetAutoTooltip (DependencyObject d, bool value) {
d.SetValue (AutoTooltipProperty, value);
}
public static bool GetAutoTooltip (DependencyObject d) {
return (bool) d.GetValue (AutoTooltipProperty);
}
private static void OnAutoTooltipPropertyChanged (DependencyObject d, DependencyPropertyChangedEventArgs e) {
var tb = d as TextBlock;
if (tb != null) {
bool newValue = (bool) e.NewValue;
if (newValue) {
SetTooltipBasedOnTrimmingState (tb);
tb.SizeChanged += OnTextBlockSizeChanged;
}
else {
tb.SizeChanged -= OnTextBlockSizeChanged;
}
}
}
private static void OnTextBlockSizeChanged (object sender, SizeChangedEventArgs e) {
var tb = sender as TextBlock;
if (tb != null) {
SetTooltipBasedOnTrimmingState (tb);
}
}
private static void SetTooltipBasedOnTrimmingState (TextBlock tb) {
bool isTextTrimmed = tb.ActualWidth < tb.DesiredSize.Width;
ToolTipService.SetToolTip (tb, isTextTrimmed ? tb.Text : null);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 XAML 中使用它,如下所示:
<TextBlock Content="long text"
TextTrimming="CharacterEllipsis"
TextBlockUtils.AutoTooltip="True" />
Run Code Online (Sandbox Code Playgroud)
仅当文本块被修剪时才会显示工具提示。
| 归档时间: |
|
| 查看次数: |
2825 次 |
| 最近记录: |