我遇到了一个我无法解释/解决的小问题:x (可以通过不将工具提示放在资源中并复制工具提示代码来完成解决,但在我看来这不是一个好的解决方案)
我想要实现的是仅在修剪文本时显示工具提示。 网上有很多解决方案。问题不在于:)
问题在于我将工具提示放在资源中(因此只有1个工具提示对象)然后,看起来工具提示的宽度不会按原样重新计算/刷新。
PS:我已经为窗口设置了这个尺寸(一定要修剪)
Height="100" Width="200"
让我们看看代码:
<Window.Resources>
<converters:TextTrimmedToVisibilityConverter x:Key="TextTrimmedToVisibilityConverter" />
<ToolTip x:Key="TrimmedTooltip"
DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}"
Visibility="{Binding ., Converter={StaticResource TextTrimmedToVisibilityConverter}}">
<ToolTip.Content>
<TextBlock Text="{Binding Text}" />
</ToolTip.Content>
</ToolTip>
</Window.Resources>
<Grid>
<StackPanel>
<TextBlock Text="Text 1" TextTrimming="CharacterEllipsis" ToolTip="{StaticResource TrimmedTooltip}" />
<TextBlock Text="blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla" TextTrimming="CharacterEllipsis" ToolTip="{StaticResource TrimmedTooltip}" />
</StackPanel>
</Grid>
这是转换器:
public class TextTrimmedToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return Visibility.Collapsed;
// Retrieve the TextBlock which may need the tooltip (PlacementTarget of the ToolTip)
FrameworkElement fe = (FrameworkElement)value;
// Measure it without the eventual trimming to get the exact desired size
fe.Measure(new System.Windows.Size(Double.PositiveInfinity, Double.PositiveInfinity));
// Now we know if the tooltip needs to be displayed
if (fe.ActualWidth < fe.DesiredSize.Width)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
错误的行为可以通过以下方式获得:
所以问题是由于我重复使用相同的工具提示这一事实(因为工具提示的宽度在绑定被修正时不会刷新)
任何人都能解释一下这个吗?我怎样才能更新宽度?
先谢谢大师!
GAEL
PS:我正在使用VS 2010 SP1,该项目是.NET 4 Client Profile
编辑:回答发布
答案 0 :(得分:2)
嗯,问题是因为我在转换器中使用了Visibilty.Collapsed,我认为它不允许以某种方式计算工具提示的大小。
将可见性设置为Hidden解决了它。 如果有人能够解释,那就太棒了!