csharp [WPF]文字が见切れたらツールチップで全文字列表示するテキストボックス

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp [WPF]文字が见切れたらツールチップで全文字列表示するテキストボックス相关的知识,希望对你有一定的参考价值。

// 参考:http://www.codeproject.com/Articles/309927/WPF-TextBox-With-Ellipsis
public class TextBoxEx : System.Windows.Controls.TextBox
{
    private string _longText;
    private bool _useLongTextForToolTip;
    private bool _isExternalChange;

    public TextBoxEx()
    {
        _longText = string.Empty;
        _useLongTextForToolTip = true;
        _isExternalChange = true;

        LayoutUpdated += TextBoxEx_LayoutUpdated;
        SizeChanged += TextBoxEx_SizeChanged;
    }

    public string LongText
    {
        get { return _longText; }
        set
        {
            _longText = value ?? string.Empty;
            PrepareForLayout();
        }
    }

    public bool UseLongTextForToolTip
    {
        get { return _useLongTextForToolTip; }
        set
        {
            if (_useLongTextForToolTip != value)
            {
                _useLongTextForToolTip = value;
                if (value)
                {
                    if (ExtentWidth > ViewportWidth || Text != _longText)
                    {
                        ToolTip = _longText;
                    }
                }
                else
                {
                    if (_longText.Equals(ToolTip))
                    {
                        ToolTip = null;
                    }
                }
            }
        }
    }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        if (_isExternalChange)
        {
            _longText = Text ?? string.Empty;

            if (UseLongTextForToolTip)
            {
                ToolTip = _longText;
            }

            PrepareForLayout();
            base.OnTextChanged(e);                
        }

    }

    protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
    {
        SetText(_longText);
        base.OnGotKeyboardFocus(e);
    }

    protected override void OnLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
    {
        PrepareForLayout();
        base.OnLostKeyboardFocus(e);
    }

    void TextBoxEx_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
    {
        if (Math.Abs(e.NewSize.Width - e.PreviousSize.Width) > float.Epsilon)
        {
            PrepareForLayout();
        }
    }

    void TextBoxEx_LayoutUpdated(object sender, EventArgs e)
    {
        if (UseLongTextForToolTip)
        {
            if (ExtentWidth > ViewportWidth)
            {
                ToolTip = _longText;
            }
            else
            {
                ToolTip = null;
            }
        }
    }

    private void PrepareForLayout()
    {
        SetText(_longText);
    }

    private void SetText(string value)
    {
        if (Text != value)
        {
            _isExternalChange = false;
            Text = value;
            _isExternalChange = true;
        }
    }
}

以上是关于csharp [WPF]文字が见切れたらツールチップで全文字列表示するテキストボックス的主要内容,如果未能解决你的问题,请参考以下文章

csharp オバケはDOTween.Sequenceで不透明度変更を缲り返す。倒されたら序列を止める

csharp スタートボタンを押したら音声再生后にステージ选択シーンへ迁移する

csharp FromComponentOn()は引数のGameObjectに予めアタッチされたコンポーネントをうhttp://negi-lab.blog.jp/ZenjectInstaller

csharp FromComponentInNewPrefabメソッドは,引数の预制をインスタンス化してアタッチされたコンポーネントを注入するhttp://negi-lab.blog.jp/Zenje

javascript 以外のところをクリックされたら消す

html チェックされたら推可能になるボタン