2010-08-18 17 views
8

me gustaría hacer que un tooltip textblock sea visible condicionalmente.agregando visibilidad condicional al control WPF Información sobre herramientas

que he definido como la descripción:

<TextBlock> 
    <TextBlock.ToolTip> 
     <Grid>...</Grid> 
    </TextBlock.ToolTip> 
</TextBlock> 

donde sería propiedad de visibilidad ir en esa definición? no parece gustarle ninguna de mis suposiciones.

hay algunas sugerencias de simplemente trabajar con la visibilidad de la red. el problema con ese enfoque es hacer que la cuadrícula sea invisible, todavía mostrará el cuadro de información sobre herramientas vacío ... y es por eso que estoy tratando de controlar la visibilidad de la información sobre herramientas.

Respuesta

12

Pruebe esto. No dejará un marco vacío.

<TextBlock Text="test"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Visible"> 
       Hello 
      </ToolTip> 
     </TextBlock.ToolTip> 
    </TextBlock> 

<TextBlock Text="test"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Hidden"> 
       Hello 
      </ToolTip> 
     </TextBlock.ToolTip> 
    </TextBlock> 
0

Debe establecer la visibilidad en la red:

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="visibilityConverter" /> 
</Window.Resources> 


... 

<Grid Visibility="{Binding IsToolTipVisible, Converter={StaticResource visibilityConverter}}> 
... 
</Grid> 
3

Aquí tienes;

<TextBlock Text="Dummy text"> 
     <TextBlock.ToolTip> 
      <ToolTip Visibility="Collapsed"> 
       <TextBlock Text="Text tooltip"></TextBlock> 
      </ToolTip>     
     </TextBlock.ToolTip> 
    </TextBlock> 
+0

me gustaría controlar la visibilidad de información sobre herramientas. si hago que la cuadrícula sea invisible, aún se mostrará el cuadro de información sobre herramientas vacío. –

+1

Pruébalo en TextBlock como "" – NetSide

+0

No quiero que el bloque de texto sea invisible. solo la información sobre herramientas –

0

Si no desea que la información sobre herramientas muestre el fotograma vacío. Debería crear un ToolTip ControlTemplate separado con todos sus cuadrículas y bloques de texto requeridos y asignarlo a la plantilla de información sobre herramientas. Esto podría ayudarte a resolver el problema del marco vacío.

+0

+1 Parece un mejor enfoque que hacerlo sin la plantilla y tener redundancia. –

1

Me doy cuenta de que tiene un año, pero puede lograr esto en el código subyacente.

private void control_ToolTipOpening(object sender, ToolTipEventArgs e) 
{ 

    if (condition) 
     e.Handled = true; 
} 

Si desea establecer una propiedad aquí, puede hacerlo y vincularlo a la visibilidad. No olvides implementar la interfaz INotifyPropertyChanged en tu ventana.

Algo así como:

private void control_ToolTipOpening(object sender, ToolTipEventArgs e) 
{ 

    if (condition) 
    { 
     showControl=true; 
     e.Handled = true; 
    } 
} 

    public Visibility showControl 
    { 
     get 
     { 
     return _showControl; 
     } 
     set 
     { 
     _showControl = value; 
     NotifyPropertyChanged("showControl"); 
     } 
    } 

y luego se unen a la propiedad de visibilidad como

Visibility = "{Binding showControl}" 

estoy escribiendo esto principalmente para ayudar a alguien que viene a través de esta a partir de ahora. Supongo que todavía no estás atrapado en esto un año después, OP. =)

2

El TextBlock con su información sobre herramientas:

<TextBlock Text="{Binding Path=TextBoxText}"> 
    <TextBlock.ToolTip> 
     <ToolTip Visibility="{Binding Path=ToolTipText, Converter={StaticResource StringToVisibilityConverter}}"> 
      <Grid><TextBlock Text="{Binding Path=ToolTipText}" /></Grid> 
     </ToolTip> 
    </TextBlock.ToolTip> 
</TextBlock> 

El objeto que se une a la TextBlock:

public class TextBoxBindingObject 
{ 
    public string TextBoxText{ get; set; } 
    public string ToolTipText{ get; set; } 
} 

El convertidor:

[ValueConversion(typeof(string), typeof(Visibility))] 
public class StringToVisibilityConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(value is string) 
     { 
      var stringValue = value as string; 

      if(!String.IsNullOrEmpty(stringValue)) 
       return Visibility.Visible; 
     } 

     return Visibility.Hidden; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
1

¿Qué hay de la creación de estilo personalizado para Tooltip? De esta forma, puede volver a utilizar la misma funcionalidad en varios lugares con un código mínimo.

agregar esto a una ResourceDictionary e incluirla donde cada vez que quiere pasar por encima de información sobre herramientas comportamiento predeterminado -

<Style TargetType="ToolTip" x:Key="{x:Type ToolTip}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=Content, 
              RelativeSource={RelativeSource Self}, 
              Converter={local:ToolTipContentConverter}}" 
         Value=""> 
       <Setter Property="Visibility" Value="Hidden"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

Seguido por el convertidor -

[ValueConversion(typeof(object), typeof(string))] 
    public class ToolTipContentConverter : MarkupExtension, IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value ?? string.Empty; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     public override object ProvideValue(IServiceProvider serviceProvider) 
     { 
      return this; 
     } 
    } 

Espero que esto ayude .. Amit

0

Ejemplo: Quiero almacenar información sobre la línea y agregar a mi lienzo

Line line = new Line(); 
line.X1 = 100; 
line.Y1 = 100; 
line.X2 = 500; 
line.Y2 = 100; 
line.Stroke = Brushes.Red; 
line.StrokeThickness = 1; 
line.ToolTip = new ToolTip { Content = "This is a line",Visibility= Visibility.Collapsed }; 
canvas.Children.Add(line); 
Cuestiones relacionadas