【问题标题】:WPF TextBox scroll to end only works onceWPF TextBox 滚动到结束只工作一次
【发布时间】:2014-05-20 17:49: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();

都没有成功。

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

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

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

有没有人有一种万无一失的方法来在文本框中显示刺痛的最后一部分?

【问题讨论】:

    标签: c# wpf textbox scroll


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      相关资源
      最近更新 更多