WPF文本框滚动到结束只工作一次

本文关键字:一次 工作 文本 滚动 结束 WPF | 更新日期: 2023-09-27 18:04:29

我有2个文本框',其中包含路径到文件名。路径很长,所以我希望文本显示完整路径字符串的末尾,以便用户可以看到文件名和路径的最后一部分。

文本框称为

TxInPanel.PcmFilename
TxOutPanel.PcmFilename

我将第一个文本框设置为显示文本的结尾,如下所示:

    // Set textbox and filename
    tb = TxInPanel.PcmFilename;
    tb.Text = txInDefaultPcm.ToString();
    // Display end of filename in textbox
    tb.Focus();
    tb.CaretIndex = tb.Text.Length;
    var rect = tb.GetRectFromCharacterIndex(tb.CaretIndex);
    tb.ScrollToHorizontalOffset(rect.Right);

这个工作很棒!

什么不工作,在所有是当我再次尝试下一个文本框:

    // Set textbox and filename
    tb = TxOutPanel.PcmFilename;
    tb.Text = txOutDefaultPcm.ToString();
    // Display end of filename in textbox
    tb.Focus();            
    tb.CaretIndex = tb.Text.Length;
    rect = tb.GetRectFromCharacterIndex(tb.CaretIndex);
    tb.ScrollToHorizontalOffset(rect.Right);

这很奇怪。如果我交换上面的顺序,它总是对第一个文本框起作用,而不是最后一个文本框。

其他我尝试过的东西,在不同的组合:

    tb.ScrollToHorizontalOffset(Math.Max(rect.Right, tb.HorizontalOffset));
    tb.ScrollToEnd();

都没有成功。

我还应该说,我使用的文本框来自于我创建的UserControl。

<TextBox   Name="PcmFilename" Grid.Row="1" Grid.Column="1" Height="25" Grid.ColumnSpan="3" VerticalAlignment="Center" TextAlignment="Left" />

当运行应用程序时,我看到"工作"文本框在字符串的末尾有一个carat光标,但它不闪烁,它是一条实心竖线,这是不对的。这让我觉得问题在于把焦点放在第二个文本框上。

有没有人有一个傻瓜证明的方法显示一个字符串的最后一部分在文本框中?

WPF文本框滚动到结束只工作一次

一种方法是将FlowDirection更改为RightToLeft,以便任何文本都被视为文本的开始,并从文本框的右边缘开始显示