2010-08-18 6 views
8

Ich möchte einen QuickInfo Tooltip bedingt sichtbar machen.Hinzufügen von bedingten Sichtbarkeit zu WPF Steuerelement QuickInfo

Ich habe den Tooltip wie folgt definiert:

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

unübersichtliche Eigenschaft in dieser Definition gehen würde? es scheint keine meiner Vermutungen zu mögen.

Es gibt einige Vorschläge, wie man nur mit der Grid-Sichtbarkeit arbeitet. Das Problem bei diesem Ansatz ist, dass das Gitter unsichtbar bleibt und trotzdem eine leere Tooltip-Box angezeigt wird. Deshalb versuche ich die Tooltip-Sichtbarkeit zu kontrollieren.

Antwort

12

Versuchen Sie dies. Es wird keinen leeren Rahmen hinterlassen.

<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

Sie sollten die Sichtbarkeit auf dem Gitter gesetzt:

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


... 

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

Hier gehen Sie;

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

ich möchte Tooltip Sichtbarkeit zu steuern. Wenn ich das Gitter unsichtbar mache, wird immer noch ein leerer Tooltip-Frame angezeigt. –

+1

Probieren Sie es in TextBlock wie "" – NetSide

+0

Ich möchte den Textblock nicht unsichtbar machen. nur die Tooltip –

0

Wenn Sie nicht möchten, dass der Tooltip einen leeren Rahmen anzeigt. Sie sollten eine separate QuickInfo ControlTemplate mit allen erforderlichen Raster- und Textblöcken erstellen und sie der QuickInfo-Vorlage zuweisen. Dies könnte Ihnen helfen, das leere Rahmenproblem zu lösen.

+0

+1 Scheint einen besseren Ansatz als das ohne Template und Redundanz. –

1

Ich weiß, das ist ein Jahr alt, aber Sie können dies in der Code-Behind durchführen.

private void control_ToolTipOpening(object sender, ToolTipEventArgs e) 
{ 

    if (condition) 
     e.Handled = true; 
} 

Wenn Sie hier eine Eigenschaft festlegen möchten, können Sie dies tun und an die Sichtbarkeit binden. Vergessen Sie nicht, die INotifyPropertyChanged-Schnittstelle in Ihrem Fenster zu implementieren.

Etwas wie:

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"); 
     } 
    } 

und dann binden sie an die Sichtbarkeit Eigenschaft als

Visibility = "{Binding showControl}" 

Ich schreibe dies vor allem, jedem zu helfen, die nach vorne von diesem Punkt über diese kommt. Ich schätze, dass Sie ein Jahr später noch immer nicht daran festhalten, OP. =)

2

Der Textblock mit Quick-Info:

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

Das Objekt, an den Textblock Bindung:

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

Der Konverter:

[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

Wie zu benutzerdefinierten Stil zu schaffen für Tooltipp? Auf diese Weise können Sie die gleiche Funktionalität an mehreren Orten mit minimalem Code wiederverwenden.

Fügen Sie diese ein Resource und ist es, wo immer Sie wollen Tooltip Standardverhalten zu reiten -

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

vom Konverter Gefolgt -

[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; 
     } 
    } 

this helps .. Amit

0

Beispiel: Ich möchte Informationen über die Linie speichern und meiner Leinwand hinzufügen

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); 
Verwandte Themen