Различная высота строки для элементов в ObservableCollection, привязанных к ItemsControl, в зависимости от типа данных - PullRequest
0 голосов
/ 14 февраля 2019

Кто-нибудь знает, возможно ли различать высоту каждого элемента в ItemsControl в зависимости от типа данных рассматриваемого элемента?

Допустим, у меня есть ObservableCollection объектов, примерно так:

SomeItemToDraw
SomeItemToDraw
SomeItemToDraw
Divider
SomeItemToDraw
SomeItemToDraw
Divider
SomeItemToDraw

Я связал это с ItemsControl, с различными шаблонами данных для каждого типа:

<ItemsControl ItemsSource="{Binding Myitems}" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <UniformGrid Columns="1" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.Resources>

    <DataTemplate DataType="{x:Type example:SomeItemToDraw>
      <!-- A big ascii owl -->
    </DataTemplate>
    <DataTemplate DataType="{x:Type example:Divider>
      <!-- A single line -->
    </DataTemplate>

</ItemsControl.Resources>

Очевидно, что в приведенном выше примере каждому элементу присваивается равное пространство.Поэтому одной строке дается то же пространство, что и у массивной совы ascii.

Возможно ли, не имея фиксированной коллекции (скажем, случайной каждый раз), гарантировать, что мы все еще заполняем родительский контейнер и гарантируют, что типы данных 'Divider' будут иметь высоту только 1 пиксель, тогда как совы ascii получают равную долю остальных?

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

...