Эллипсис в начале строки в WPF ListView

Ваш текущий код принимает каждую пару, а затем для каждого под прямоугольника размера row x col устанавливает площадь прямоугольника равной 1. Это действительно близко. Вам просто нужно установить один раз для каждой заказанной пары:

for(i = 0; i < 6; i++) {
    row = matrixAin[i][0];
    col = matrixAin[i][1];
    matrixA[row - 1][col - 1] = 1;
}
11
задан Zach Johnson 23 July 2010 в 01:50
поделиться

3 ответа

Вы могли попытаться использовать ValueConverter (cf. Интерфейс IValueConverter), чтобы поменять струны, которые должны быть отображены в поле списка самостоятельно. Таким образом, в реализации метода Преобразования Вы протестировали бы, если строки длиннее, чем свободное место и затем изменяют их на... плюс правая сторона строки.

2
ответ дан 3 December 2019 в 08:57
поделиться

К сожалению, это не возможно в WPF сегодня, как Вы видите из документации.

(Я раньше работал в Microsoft над WPF, это было функцией, мы, к сожалению, не нашли время для выполнения - не уверенный, если это планируется будущую версию),

4
ответ дан 3 December 2019 в 08:57
поделиться

Вот пример эффективного обрезания текста с помощью рекурсивного логарифмического алгоритма:

private static string ClipTextToWidth(
    TextBlock reference, string text, double maxWidth)
{
    var half = text.Substring(0, text.Length/2);

    if (half.Length > 0)
    {
        reference.Text = half;
        var actualWidth = reference.ActualWidth;

        if (actualWidth > maxWidth)
        {
            return ClipTextToWidth(reference, half, maxWidth);
        }

        return half + ClipTextToWidth(
            reference,
            text.Substring(half.Length, text.Length - half.Length),
            maxWidth - actualWidth);
    }
    return string.Empty;
}

Предположим, у вас есть поле TextBlock с именем textBlock , и вы хотите обрезать текст в нем с заданной максимальной шириной с добавленным многоточием. Следующий метод вызывает ClipTextToWidth , чтобы установить текст для поля textBlock :

public void UpdateTextBlock(string text, double maxWidth)
{
    if (text != null)
    {
        this.textBlock.Text = text;

        if (this.textBlock.ActualWidth > maxWidth)
        {
            this.textBlock.Text = "...";
            var ellipsisWidth = this.textBlock.ActualWidth;

            this.textBlock.Text = "..." + ClipTextToWidth(
                this.textBlock, text, maxWidth - ellipsisWidth);
        }
    }
    else
    {
        this.textBlock.Text = string.Empty;
    }
}

Надеюсь, это поможет!

1
ответ дан 3 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: