web-dev-qa-db-ja.com

バインディングがnullの場合、ツールチップを非表示にします

現在、私はツールチップを表示する次のコードを持っています。

<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または空の文字列の場合、ツールチップを完全に削除する方法はありますか?

34
Theun Arbeider

これを行う1つの方法は、ToolTipRectangleでラップし、Transparent色を与えることです。次に、このVisibilityCollapsedRectangleに設定します。

更新:

<Border Background="#FFE45F5F">
    <Grid>
        <TextBlock Text="{Binding Property1}"/>
        <Rectangle Fill="Transparent" Visibility="{Binding Property2, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding TooltipInformation}"/>
    </Grid>
</Border>
16
Justin XL

すべてのコントロールの空のツールチップを非表示にする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"
102
HeWillem

これはWPFの回答です(Silverlightで試したことはありません)。

ToolTipService.IsEnabledを使用して、それをtooltipプロパティにバインドします。次に、コンバーターを使用してツールチップ文字列をブール値に変換します。

たとえば、私は次のとおりです。

<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>

またはコードビハインドで

ToolTipService.SetIsEnabled(textBlock, false);
4
Freek Sanders

値をString.Emptyに設定するのと同じ問題が発生していました。 nullに設定すると、問題が解決します。

WinRT/Windows 8アプリXAML

2
Akash Budhia

デフォルトのツールチップのみを使用する場合は、ビューモデルでバインド値をnullに設定するか、アイテムが空の場合は常にコンバーターを使用することをお勧めします。

私の場合、私は持っています:

public string Name { get; }

使用してバインド:

<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Tooltip="{Binding Name}" />

幅がないために切り取られた場合に、ツールチップにフルネームを表示するのはどこですか。私のviewmodelでは私は単に:

if (string.IsNullOrEmpty(Name)) Name = null;

少なくとも.Net 4.0では、これはツールチップを表示しません。

0
Almund