代码之家  ›  专栏  ›  技术社区  ›  Richard McGuire

如何使DockPanel填满可用空间

  •  18
  • Richard McGuire  · 技术社区  · 15 年前

    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

    3 回复  |  直到 13 年前
        1
  •  32
  •   Patrick Hofman Wahid Bitar    10 年前

    捆绑 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>
    
        2
  •  10
  •   NielW    11 年前

    船坞面板的优点是它们已经填满了所有可用的空间。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>
    
        3
  •  8
  •   Dave Clemmer manu    11 年前

    DockPanel 人是邪恶的。诱惑使用 StackPanel/DockPanel 复杂布局的组合会导致“布局死角”。使用网格:

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

    Grid 它几乎是独占的,为“属于一起”的每个元素块使用单独的网格