为WPF控件ToolTip添加条件可见性

Son*_*oul 8 wpf wpf-controls

我想使文本块工具提示有条件地可见.

我将工具提示定义为:

<TextBlock>
    <TextBlock.ToolTip>
        <Grid>...</Grid>
    </TextBlock.ToolTip>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

可见性属性在该定义中的位置?它似乎不喜欢我的任何猜测.

有一些建议只是使用网格可见性.这种方法的问题是使网格不可见仍然会显示空的工具提示框..这就是我试图控制工具提示可见性的原因.

Cri*_*spy 13

试试这个.它不会留下空框架.

<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>
Run Code Online (Sandbox Code Playgroud)


Rya*_*ars 5

带有工具提示的 TextBlock:

<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>
Run Code Online (Sandbox Code Playgroud)

要绑定到 TextBlock 的对象:

public class TextBoxBindingObject
{
   public string TextBoxText{ get; set; }
   public string ToolTipText{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

转换器:

[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
}
Run Code Online (Sandbox Code Playgroud)