WPF TextBox滚动到结尾只能工作一次

时间:2014-05-20 17:49:30

标签: c# wpf textbox scroll

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

文本框名为

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();

一切都没有成功。

我还应该说我使用的TextBox来自我制作的UserControl。

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

当运行应用程序时,我看到“工作”文本框在字符串末尾有一个克拉光标,但它没有闪烁,它是一条实线垂直线,这是不对的。这让我觉得问题在于将焦点放在第二个TextBox上。

有没有人有一种在文本框中显示刺痛最后部分的简单方法?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将FlowDirection更改为RightToLeft,以便将任何文本视为右侧作为文本的开头,并从文本框的右侧边缘开始显示