Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make DockPanel fill available space

Tags:

I'm trying the content of a shopping cart in an ItemsControl(ListBox). To do so, I've created the following 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> 

When the items are displayed in my shopping cart however, the Name and Price TextBlocks are sitting right beside one another, and there is an extremely large amount of whitespace on the right hand side.

Was wondering what the best method to force the DockPanel to stretch to fill all the space made available by the ListItem was?

like image 246
Richard McGuire Avatar asked Jul 03 '09 18:07

Richard McGuire


1 Answers

Bind the Width of the DockPanel to the ActualWidth of the ListBoxItem:

<DockPanel Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"> ... 

Another option: you could just redefine the ItemContainerStyle so that the ListBoxItem is stretched horizontally:

<ListBox.ItemContainerStyle>     <Style TargetType="ListBoxItem">         <Setter Property="HorizontalContentAlignment" Value="Stretch"/>     </Style> </ListBox.ItemContainerStyle> 
like image 155
Thomas Levesque Avatar answered Sep 21 '22 01:09

Thomas Levesque