現在、私はツールチップを表示する次のコードを持っています。
<Border BorderBrush="Black"
BorderThickness="{Binding Border}"
Height="23"
Background="{Binding Color}">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding TooltipInformation}" />
</ToolTipService.ToolTip>
これは、約25の項目を持つItemsControlに表示されます。これらのいくつかだけがTooltipInformation
に設定された値を持っています
TooltipInforation
が空の文字列の場合でも、テキストブロックを含むツールチップボックスは非常に小さなウィンドウ(高さ5px、幅20px)として表示されます。テキストブロックの表示設定を折りたたんでも。
TooltipInformationの値がnullまたは空の文字列の場合、ツールチップを完全に削除する方法はありますか?
これを行う1つの方法は、ToolTip
をRectangle
でラップし、Transparent
色を与えることです。次に、このVisibility
でCollapsed
をRectangle
に設定します。
更新:
<Border Background="#FFE45F5F">
<Grid>
<TextBlock Text="{Binding Property1}"/>
<Rectangle Fill="Transparent" Visibility="{Binding Property2, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding TooltipInformation}"/>
</Grid>
</Border>
すべてのコントロールの空のツールチップを非表示にする1つの方法は、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>
また、sys名前空間も含めます(String.Emptyの場合):
xmlns:sys="clr-namespace:System;Assembly=mscorlib"
これはWPFの回答です(Silverlightで試したことはありません)。
ToolTipService.IsEnabledを使用して、それをtooltipプロパティにバインドします。次に、コンバーターを使用してツールチップ文字列をブール値に変換します。
たとえば、私は次のとおりです。
<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
またはコードビハインドで
ToolTipService.SetIsEnabled(textBlock, false);
値をString.Emptyに設定するのと同じ問題が発生していました。 nullに設定すると、問題が解決します。
WinRT/Windows 8アプリXAML
デフォルトのツールチップのみを使用する場合は、ビューモデルでバインド値をnullに設定するか、アイテムが空の場合は常にコンバーターを使用することをお勧めします。
私の場合、私は持っています:
public string Name { get; }
使用してバインド:
<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Tooltip="{Binding Name}" />
幅がないために切り取られた場合に、ツールチップにフルネームを表示するのはどこですか。私のviewmodelでは私は単に:
if (string.IsNullOrEmpty(Name)) Name = null;
少なくとも.Net 4.0では、これはツールチップを表示しません。