как следовать за концом текста в TextBox без NoWrap - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть текстовое поле в xaml:

<TextBox Name="Text" HorizontalAlignment="Left" Height="75"   VerticalContentAlignment="Center" TextWrapping="NoWrap" Text="TextBox" Width="336"  BorderBrush="Black" FontSize="40" />

Я добавляю текст к нему следующим способом:

private string words = "Initial text contents of the TextBox.";

public async void textRotation()
{
    for(int a =0; a < words.Length; a++)
    {
        Text.Text = words.Substring(0,a);
        await Task.Delay(500);
    }
}

Как только текст выходит из переноса,есть способ сфокусировать конец так, чтобы старый текст исчезал слева, а новый справа, а не просто добавлял его справа, не видя.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Это должно быть довольно легко достичь, попробуйте добавить этот код:

public async void textRotation()
    {
        for(int a =0; a < words.Length; a++)
        {
            Text.Text = words.Substring(0,a);
            Text.ScrollToHorizontalOffset(Text.Text.Last());
            await Task.Delay(500);

        }
    }
0 голосов
/ 31 декабря 2018

Быстрый метод - измерить строку (words), которую нужно прокрутить, с помощью TextRenderer.MeasureText , разделить меру width на части, равную количеству символов в строке, и использовать ScrollToHorizontOffset () для выполнения прокрутки:

public async void textRotation()
{
    float textPart = TextRenderer.MeasureText(words, new Font(Text.FontFamily.Source, (float)Text.FontSize)).Width / words.Length;
    for (int i = 0; i < words.Length; i++)
    {
        Text.Text = words.Substring(0, i);
        await Task.Delay(100);
        Text.ScrollToHorizontalOffset(textPart * i);
    }
}

То же самое, но с использованием класса FormattedText для измерения строки:

public async void textRotation()
{
    var textFormat = new FormattedText(
        words, CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight,
        new Typeface(this.Text.FontFamily, this.Text.FontStyle, this.Text.FontWeight, this.Text.FontStretch),
        this.Text.FontSize, null, null, 1);

    float textPart = (float)textFormat.Width / words.Length;
    for (int i = 0; i < words.Length; i++)
    {
        Text.Text = words.Substring(0, i);
        await Task.Delay(200);
        Text.ScrollToHorizontalOffset(textPart * i);
    }
}

WPF scrolling text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...