24

でショッピングカートのコンテンツを試してい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でしたか?

4

3 に答える 3

32

のを:のWidthにバインドします。DockPanelActualWidthListBoxItem

<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>
于 2009-07-03T19:03:32.907 に答える
9

DockPanelsは悪です。複雑なレイアウトに組み合わせを使用する誘惑StackPanel/DockPanelは、「レイアウトの行き止まり」につながります。グリッドを使用する:

<Grid>
  <TextBlock HorizontalAlignment="Left"
...
  <TextBlock HorizontalAlignment="Right"
...
/Grid>

私はGridほぼ独占的に s を使用し、「一緒に属する」要素のブロックごとに個別のグリッドを使用します

于 2009-07-03T20:48:07.247 に答える