Как часть стиля ItemsControl
я хотел бы иметь что-то, что работает как Grid/UniformGrid
как ItemsPanel
.
В простейшем виде Style
будет выглядеть так:
<Style TargetType="{x:Type ItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ItemsPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<UniformGrid Columns="2" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style>
<Setter Property="Control.Margin" Value="10"/>
</Style>
</Setter.Value>
</Setter>
</Style>
и я бы использовал это так:
<WrapPanel Orientation="Vertical">
<ItemsControl>
<TextBlock Text="Label1:"/>
<TextBlock Text="ThisWillBeBound" />
</ItemsControl>
<ItemsControl>
<TextBlock Text="Label2:"/>
<TextBlock Text="ThisWillBeBound" />
</ItemsControl>
<ItemsControl>
<TextBlock Text="Label3:"/>
<TextBlock Text="ThisWillBeBound" />
</ItemsControl>
<ItemsControl>
<TextBlock Text="Label4:"/>
<TextBlock Text="ThisWillBeBoundButIsSomewhatLongerThenTheOtherProperties" />
</ItemsControl>
<ItemsControl>
<TextBlock Text="Label5:"/>
<TextBlock Text="ThisWillBeBound" />
</ItemsControl>
<ItemsControl>
<TextBlock Text="Label6:"/>
<TextBlock Text="ThisWillBeBound" />
</ItemsControl>
</WrapPanel>
Как вы можете видеть, вы бы добавили Label
для свойства в это плюс привязку к этому свойству, и они слиплись бы, даже если бы вещи обернулись вокруг, например, из-за разных размеров окна приложения.
Хорошая особенность UniformGrid
в том, что кажется, что если один Label
длиннее, другие получат одинаковое пространство, то есть связанные свойства будут выстроены аккуратно (почему это происходит, я не понимаю, потому что эти должен быть отдельным UniformGrid
s, я думаю). Проблема здесь заключается в том, что ширина ячеек части Label
и части Property
одинакова, поэтому, если свойство длинное, между Label
и Property
.
будет большой разрыв.
Использование обычного Grid
вместо этого означало бы, что мне придется устанавливать Grid.Column="0"
и Grid.Column="1"
везде, куда я помещаю предметы в ItemsControl
. Это не совсем то, чем я не хочу.
Есть ли способ для меня иметь какую-то сетку, которая выстраивается в линию, как единая, но не разбивает все столбцы, когда нужно только, и предполагает, что вы помещаете в столбцы точно так же, как объявляете элементы?