c# silverlight xaml binding tooltip

c# - Ocultar información sobre herramientas si el enlace es nulo



silverlight xaml (6)

Actualmente tengo el siguiente código para mostrar una información sobre herramientas.

<Border BorderBrush="Black" BorderThickness="{Binding Border}" Height="23" Background="{Binding Color}"> <ToolTipService.ToolTip> <TextBlock Text="{Binding TooltipInformation}" /> </ToolTipService.ToolTip>

Esto se presenta en ItemsControl con alrededor de 25 artículos. Solo algunos de estos tienen un valor establecido en TooltipInformation

Si TooltipInforation es una cadena vacía, todavía muestra la tooltipbox que contiene el bloque de texto como una ventana muy pequeña (aproximadamente 5 px de alto y 20 px de ancho). Incluso si configuro la visibilidad del bloque de texto para que se contraiga.

¿Hay alguna manera de eliminar completamente la información sobre herramientas si el valor de TooltipInformation es nulo o una cadena vacía?


Esta es una respuesta de WPF (no lo he intentado en Silverlight).

Use ToolTipService.IsEnabled y vincule a la propiedad de información sobre herramientas. Luego use un convertidor para convertir la cadena de información sobre herramientas en un bool.

Por ejemplo, tengo lo siguiente:

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

O en código detrás

ToolTipService.SetIsEnabled(textBlock, false);


Estaba teniendo el mismo problema que estaba poniendo valor a String.Empty. Establecerlo en nulo resuelve el problema.

Aplicación WinRT / Windows 8 XAML


Podría crear un convertidor de cadena a bool que devuelva falso si la longitud de la cadena es 0 y verdadera de lo contrario, luego vincule la información sobre herramientas con la información sobre herramientas con ese convertidor.


Si solo usara la información sobre herramientas predeterminada, recomendaría establecer el valor enlazado en nulo en el modelo de vista o usar un convertidor siempre que el elemento esté vacío.

En mi caso tengo un:

public string Name { get; }

Encuadernado usando:

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

Donde la idea es mostrar el nombre completo en la información sobre herramientas si se corta debido a la falta de ancho. En mi modelo de vista, simplemente:

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

Al menos en .Net 4.0 esto no mostrará una información sobre herramientas para mí.


Una forma de hacerlo es ajustar la ToolTip en un Rectangle y darle un color Transparent . Luego, simplemente establece la Visibility en Collapsed en este Rectangle .

Actualizar:

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


Una forma de ocultar una información sobre herramientas vacía para todos los controles es crear un estilo en un diccionario de recursos que se incluye en su App.xaml. Este estilo establece la visibilidad al contraerse cuando la información sobre herramientas es una cadena vacía o nula:

<!-- 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>

También incluye el espacio de nombres sys (para String.Empty):

xmlns:sys="clr-namespace:System;assembly=mscorlib"