我想的购物车中的内容ItemsControl(ListBox)
。 要做到这一点,我创建了下面DataTemplate
:
<DataTemplate x:Key="Templates.ShoppingCartProduct"
DataType="{x:Type viewModel:ProductViewModel}">
<DockPanel HorizontalAlignment="Stretch">
<TextBlock DockPanel.Dock="Left"
Text="{Binding Path=Name}"
FontSize="10"
Foreground="Black" />
<TextBlock DockPanel.Dock="Right"
Text="{Binding Path=Price, StringFormat=\{0:C\}}"
FontSize="10"
Foreground="Black" />
</DockPanel>
</DataTemplate>
当项目但是显示在我的购物车,名称和价格TextBlocks
坐在旁边彼此,并且有在右手侧极大量的空白。
想知道什么给力的最好方法DockPanel
拉伸以填补提供的所有空间ListItem
是?
绑定Width
的的DockPanel
的ActualWidth
中的ListBoxItem
:
<DockPanel Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}">
...
另一种选择:你可以只重新定义ItemContainerStyle
使得ListBoxItem
被水平拉伸:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
关于码头面板的好处是,他们已经填补所有可用空间。 LastChildFill默认为true(但我将它下面的清晰度),因此只要不设置上的最后一个孩子的DockPanel中属性,它将填补可用空间。
<DockPanel HorizontalAlignment="Stretch" LastChildFill="true">
<TextBlock DockPanel.Dock="Left"
Text="{Binding Path=Name}"
FontSize="10"
Foreground="Black" />
<TextBlock
Text="{Binding Path=Price, StringFormat=\{0:C\}}"
FontSize="10"
Foreground="Black" />
</DockPanel>
DockPanel
s为邪恶。 诱惑使用StackPanel/DockPanel
进行复杂的布局组合导致“布局死角”。 使用网格:
<Grid>
<TextBlock HorizontalAlignment="Left"
...
<TextBlock HorizontalAlignment="Right"
...
/Grid>
我用Grid
差不多排他地,使用一个单独的网格元件的每个块“属于彼此”