如果文本框不为空,如何添加和显示工具提示文本框 WPF

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11925113/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 04:57:12  来源:igfitidea点击:

How add and show tooltip textbox WPF if textbox not empty

c#wpf

提问by Pavel

Need to show a hint, which contains data from a text field. Prompt to appear if the textbox has data.

需要显示一个提示,其中包含来自文本字段的数据。如果文本框有数据,提示出现。

回答by dvvrd

Just use binding to ToolTipService attached properties. XAML:

只需使用绑定到 ToolTipService 附加属性。XAML:

<UserControl.Resources>
    <converters:IsStringNonemptyConverter x:Key="ToolTipVisibilityConveter" />
</UserControl.Resources>

<TextBox Name="textBox" VerticalAlignment="Center" HorizontalAlignment="Center" Width="150"
         ToolTipService.ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"
         ToolTipService.IsEnabled="{Binding Text, RelativeSource={RelativeSource Self}, Converter={StaticResource ToolTipVisibilityConveter}}"/>

Converter:

转换器:

internal sealed class IsStringNonemptyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !String.IsNullOrEmpty(value as string);
    }

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

回答by Rohit Vats

You can disable the tooltip using triggers. Place this style in your window or App resources so that it can be shared across all the textboxes in your window or application depending on your choice -

您可以使用触发器禁用工具提示。将此样式放置在您的窗口或应用程序资源中,以便它可以根据您的选择在您的窗口或应用程序中的所有文本框之间共享 -

<Style x:Key="{x:Type TextBox}" TargetType="TextBox">
  <Style.Triggers>
     <Trigger Property="ToolTip" Value="{x:Static sys:String.Empty}">
        <Setter Property="ToolTipService.IsEnabled" Value="False" />
      </Trigger>
</Style.Triggers>

Make sure you add the system namespace to your xaml -

确保将系统命名空间添加到您的 xaml -

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

回答by Matthijs H

I had this problem myself and figured out a different solution. I know this question has been answered but just like me there will still be people coming across this question, and I would like to share my solution:

我自己也遇到了这个问题,并想出了一个不同的解决方案。我知道这个问题已经回答了,但就像我一样,仍然会有人遇到这个问题,我想分享我的解决方案:

XAML

XAML

<TextBox Name="textBox1" ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}" ToolTipService.IsEnabled="False"/>

Code behind

背后的代码

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    if (textBox1.Text.Length > 0)
    {
        ToolTipService.SetIsEnabled(textBox1, true);
    }
}

I hope this helps someone.

我希望这可以帮助别人。

回答by KbManu

I tried with Visibility Mode & TextChange event. ToolTip invisible when no text. May be useful for someother. Xaml:

我尝试了可见性模式和 TextChange 事件。没有文字时工具提示不可见。可能对其他人有用。Xml:

    <TextBox Height="23" Width="100" Name="myTextBox" TextChanged="myTextBox_TextChanged" >
        <TextBox.ToolTip>
            <ToolTip Visibility="Hidden">
                <TextBlock Name="toolTipTextBlock"></TextBlock>
            </ToolTip>            
        </TextBox.ToolTip>
    </TextBox>

TextChange event handler:

TextChange 事件处理程序:

    private void myTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox tb = sender as TextBox;

        if (tb.Text.Trim() == "")
        {
            ((ToolTip)tb.ToolTip).Visibility = Visibility.Hidden;
        }
        else
        {
            toolTipTextBlock.Text = tb.Text;
            ((ToolTip)tb.ToolTip).Visibility = Visibility.Visible;
        }
    }