2009-03-11 5 views
5

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

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

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

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

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

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

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

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

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

ответ

7

Будет ли он работать для того, что вам нужно, чтобы дочерний элемент окна был 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> 

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

+0

Правильно! +1 урон от головного мозга для меня, я думал о боковых ящиках внутри отдельных ячеек, но это, конечно, совершенно идиот. Мне просто нужно схватить свойства Stretch, и я должен быть дома бесплатно - спасибо! –

1

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

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

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

+0

Спасибо за ваш ответ. Думаю, я вижу, как я мог это сделать, но ответ Дэниела Пратта разрешил его без дополнительной работы, поэтому я дал ему принятый ответ. Спасибо, что! –