Изменение размера шрифта в списке или сетке WPF для правильного использования пространства - PullRequest
5 голосов
/ 11 марта 2009

У меня есть приложение, которое отображает таблицы лиги для спортивных лиг. Эти таблицы в основном являются сетками с различными столбцами, представляющими статистику для каждой команды, такую ​​как сыгранные, выигранные, проигранные, забитые и забитые голы и т. Д. Таким образом, таблица лиги имеет одно интересное свойство: для данного соревнования у нас всегда одинаковое количество строк (представляющих команды). Так как элементы управления WPF не имеют внешнего вида, я мог бы использовать ListBox, ListView, ItemsControl напрямую или даже DataGrid. Не должно иметь большого значения.

Однако я хочу чего-то, чего еще не смог достичь: учитывая размер таблицы (на практике размер окна), ВСЕ команды должны быть видны постоянно (без вертикальной прокрутки), вся статистика столбцы (по выбору пользователя) должны быть видны, и размер шрифта должен отражать это так, чтобы он был максимально большим, при этом ни один столбец не становился слишком большим для содержимого.

Я могу легко использовать UniformGrid для получения части без вертикальной прокрутки. Однако настроить размер шрифта не так просто.

Есть, конечно, ViewBox, который позволил бы содержимому каждой ячейки таблицы иметь индивидуальный размер как можно больше, но это могло бы привести к уродству, так как в итоге вы получили бы кучу ячеек с различными размерами .

Я не ожидаю получить простой ответ на этот вопрос, но если это вообще возможно, я хотел бы услышать об этом. В итоге:

  1. Таблица должна изменить размер с окном, всегда показывая все данные без полос прокрутки.

  2. Размер шрифта должен быть установлен на максимально возможный размер, который позволяет каждому столбцу каждой строки отображать все его содержимое.

  3. Размер всех столбцов должен быть наименьшим, что позволяет видеть все содержимое, кроме одного столбца, который «* -sizing» использует оставшееся пространство.

Итак ... Какие-нибудь умные способы сделать это? :)

Ответы [ 2 ]

7 голосов
/ 12 марта 2009

Будет ли это работать для того, что вам нужно, сделать дочерний элемент окна ViewBox и поместить весь контент внутри него? Я не уверен, что детали того, что вы делаете, приведут к тому, что это не сработает, но вот чрезвычайно простой пример того, что я предлагаю:

<Window x:Class="ZoomTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1">
    <Viewbox>
        <StackPanel>
            <TextBlock>2</TextBlock>
            <TextBlock>Getting longer</TextBlock>
            <TextBlock>Here is some really long text...</TextBlock>
        </StackPanel>
    </Viewbox>
</Window>

Весь контент всегда виден, с максимально возможным размером шрифта. Весь текст масштабируется равномерно.

1 голос
/ 11 марта 2009

Вы, вероятно, можете сделать что-то подобное с размером шрифта. Установите для FontSize выражение привязки, которое связывается с самим TextBox с помощью пользовательского IValueConverter ({Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}} или что-то подобное).

Внутри конвертера у вас теперь есть ссылка на TextBox, который вы можете использовать для получения текстового содержимого, размера элемента управления, размера родительского элемента управления (сетки) и т. Д. Вы можете использовать эта информация для расчета на лету.

Если вам нужно, чтобы текстовые поля принимали это решение на основе друг друга, вы можете иметь статический обратный вызов на уровне страницы, который вы вызываете из метода Convert, который определит, по-прежнему ли вы находитесь в режиме изменения размера, и сохраните отслеживание любой другой информации (минимальный или максимальный размер шрифта уже рассчитан и т. д.). Это сложный процесс, но должно быть несколько способов сделать это. Вы даже можете сначала спрятать текст во всех полях, пройтись по всем текстовым полям, принимая решение такого рода (минимальный размер шрифта), а затем программно установить размер шрифта и затемнить его.

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