C# 如果绑定为null,则隐藏工具提示
目前,我有以下代码来显示工具提示C# 如果绑定为null,则隐藏工具提示,c#,silverlight,xaml,binding,tooltip,C#,Silverlight,Xaml,Binding,Tooltip,目前,我有以下代码来显示工具提示 <Border BorderBrush="Black" BorderThickness="{Binding Border}" Height="23" Background="{Binding Color}"> <ToolTipService.ToolTip> <TextBlock Text="{Binding TooltipInformation}" /> </To
<Border BorderBrush="Black"
BorderThickness="{Binding Border}"
Height="23"
Background="{Binding Color}">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding TooltipInformation}" />
</ToolTipService.ToolTip>
这在ItemsControl中显示,其中包含大约25个项目。其中只有一小部分的值设置为tooltipinfo
如果tooltipinfo
是一个空字符串,它仍然将包含文本块的tooltipbox显示为一个非常小的窗口(大约5px高,20px宽)。即使我将textblock Visibility设置为“折叠”
如果TooltipInformation的值为null或空字符串,是否有办法完全删除工具提示?可以这样做的一种方法是将
工具提示
包装在矩形
中,并给它一个透明的颜色。然后您只需将此矩形上的可见性设置为折叠
更新:
<Border Background="#FFE45F5F">
<Grid>
<TextBlock Text="{Binding Property1}"/>
<Rectangle Fill="Transparent" Visibility="{Binding Property2, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding TooltipInformation}"/>
</Grid>
</Border>
您可以创建一个从字符串到布尔的转换器,如果字符串长度为0,则返回false,否则返回true,然后使用该转换器将ToolTip.Active绑定到ToolTip信息。隐藏所有控件的空工具提示的一种方法是在App.xaml中包含的资源字典中创建样式。
当工具提示为空字符串或null时,此样式将可见性设置为折叠:
<!-- Style to hide tool tips that have an empty content. -->
<Style TargetType="ToolTip">
<Style.Triggers>
<Trigger Property="Content"
Value="{x:Static sys:String.Empty}">
<Setter Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger Property="Content"
Value="{x:Null}">
<Setter Property="Visibility"
Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
如果只是使用默认工具提示,我建议在viewmodel中将绑定值设置为null,或者在项目为空时使用转换器
就我而言,我有一个:
public string Name { get; }
绑定使用:
<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Tooltip="{Binding Name}" />
至少在.Net 4.0中,这不会为我显示工具提示。我在将值设置为String.Empty时遇到了相同的问题。将其设置为null可以解决此问题
WinRT/Windows 8应用程序XAML这是一个WPF答案(尚未在Silverlight中尝试)
使用ToolTipService.IsEnabled,并将其绑定到tooltip属性。然后使用转换器将工具提示字符串转换为布尔值
例如,我有以下几点:
<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
工具提示。Active在当前上下文中不可用。尝试包装一个新边框,其中包含工具提示服务和stackpanel中的textblock。然后向布尔值添加绑定,该布尔值检查字符串是否为空。使用布尔可视转换器将该布尔值绑定到新边界的可视性。但它什么也没做。事实上,它禁用了所有工具提示:)嗨,请查看我的更新答案。实际上,您不需要另一个面板,只需使用一个矩形来触发工具提示的隐藏/显示。:)完美的如果我能在silverlight中没有触发器,我会给你大大超过+1。这是最好的答案。如果Content
是一个UI元素,例如TextBlock
,则不起作用。添加BasedOn=“{StaticResource{x:Type ToolTip}
,以避免破坏现有样式(例如来自主题)+1这对我来说很有用,并且更适合我们的应用程序。我们在许多不同类型的控件中可能有几十个工具提示,因此样式设置仍然是多余的。此外,我们在某些地方(但不是其他地方)有专门的工具提示。这种方法允许使用一种方式,即“去掉空白”,我们可以在任何地方使用。
if (string.IsNullOrEmpty(Name)) Name = null;
<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
ToolTipService.SetIsEnabled(textBlock, false);