2013-10-11 3 views
0

Я пытаюсь создать динамическую таблицу в WPF на основе элемента ItemsControl. В идеале я хочу, чтобы каждый элемент коллекции отображался с определенным стилем и располагался 3 по таблице, прежде чем он обертывается и переходит к следующей строке. Он работает ЧРЕЗМЕРНО, единственная проблема заключается в том, что у меня ширина около 30 пикселей пустого пространства после записи 3 в списке. Если вы добавите цифры, вы увидите, что текстовые блоки + margin равны 140, поэтому 3 из них - 420 - ширина таблицы равна 450, поэтому есть проблема, о которой вы подумаете.WrapPanel не заполняется до полной требуемой ширины

К сожалению, нет.

Если я увеличиваю первый текстовый блок до ширины 110 вместо 105, просто небольшое изменение, которое даст общую ширину для 3 записей из 435, еще меньше 450, - это ширина таблицы, затем он обертывается только после двух записей и оставляет большое пустое пространство справа.

Мое подозрение, что это может быть связано с «зарезервированным пространством», которое WPF удерживает для вертикальной полосы прокрутки, так как обычно это ширина 20, что дает мое полезное пространство как 430, а 435 - выше, поэтому обертывания.

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

XAML ниже

<ItemsControl ItemsSource="{Binding TradeCategories}" Grid.Row="1"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" MaxWidth="450" Background="{StaticResource SubTableRow}"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" MaxWidth="150"> 
       <TextBlock Width="105" FontSize="10" Text="{Binding CategoryName}" Foreground="{StaticResource SubTableText}" Margin="5,0,0,0"/> 
       <TextBlock Width="25" FontSize="10" Text="{Binding CategoryCount}" TextAlignment="Center" Background="{StaticResource SubTableHighlightCell}" Foreground="{StaticResource SubTableText}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

по умолчанию шаблон ItemsControl не имеет 'ScrollViewer'. Если вы не отмените это самостоятельно, он не должен содержать полосы прокрутки. –

+0

Вы можете видеть любые полосы прокрутки? Я почти уверен, что 'ItemsControl' не имеет ... у' ListBox' есть внутренний 'ScrollViewer', но' ItemsControl' этого не делает. – Sheridan

+0

Хм, ладно, это не так. Но вернемся к моей первоначальной проблеме, я не могу заполнить более 420 ширины вышеприведенной таблицы. Панель обертки имеет MaxWidth 450, поэтому она должна соответствовать 3 элементам ширины 150. Но если элементы имеют ширину более 140, то только два дисплея на строку и остальные обертывания, поэтому панель обертки не используется полностью – NZJames

ответ

0

Похоже, ширина ItemControl меньше, чем вы ожидаете, это может быть ограничено это контейнер.

легко исправить, чтобы заменить

<WrapPanel Orientation="Horizontal" MaxWidth="450" ... 

по

<WrapPanel Orientation="Horizontal" MinWidth="450" ... 

так, чтобы быть уверенным, что WrapPanel имеет достаточно места для 3-х предметов. Таким образом, даже если размер ItemControl меньше 450, у вас все равно будет 3 элемента в строке.

Другим решением является заставить Width из ItemControl быть 450.

+0

Спасибо, это то, что я сделал, установив сам Ширина. Как ни странно, чтобы элементы полностью заполнили содержимое таблицы, мне нужно установить ширину оберточной панели до 450, а элементы стекапаны - 139, что означает, что время на 3 равно 417. Очень странно, поэтому где-то есть дополнительное пространство, но я не знаю, где. Теперь он работает, поэтому я могу закрыть эту проблему, но я хотел бы понять, почему это происходит. – NZJames

+0

Вы уверены, что не существует стиля, который изменяет 'Width',' Margin' или 'Padding' любого из этих элементов управления?С помощью Snoop вы можете легко проверить (snoopwpf.codeplex.com). –

+0

Спасибо за ссылку, прочитайте, как ее использовать и проверьте – NZJames

Смежные вопросы