Cannot force ListView WPF to collapse when expanding expanders in list

I have a wpf ListView with two Expander in it. When extenders expand the list, space is created for the content. When they collapse, listview does not "return" extra space. I set HorizontalAlignment and VerticalAlignment to Stretch everywhere. Is there any way to do this? Details and Chart columns contain expanders. See code below. Thank you

Here, in

 <Window.Resources> <DataTemplate x:Key="StockPriceChangeCell"> <StackPanel Orientation="Horizontal"> <Label Name="stockPriceChangeValue" Foreground="{Binding StockPriceChangeColor}" Content="{Binding StockPriceChange}" Width="Auto"></Label> </StackPanel> </DataTemplate> <DataTemplate x:Key="DetailsCell"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Expander Header="Details..." BorderBrush="DarkBlue" Width="200" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid Name="stockDetailGrid" Background="Beige" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ShowGridLines="False"> <Grid.RowDefinitions> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="96*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> <RowDefinition Height="6*" /> <RowDefinition Height="96*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" Name="previousClosePrompt" FontWeight="Bold" FontSize="12" Height="28" Width="Auto">Prev Close:</Label> <Label Grid.Row="0" Grid.Column="1" Name="previousCloseValue" FontWeight="Bold" FontSize="12" Height="28" Width="Auto" Content="{Binding StockDetails.PreviousClose}"></Label> <Separator Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator3" Margin="0,2" /> <Label Grid.Row="2" Grid.Column="0" Name="openPricePrompt" FontWeight="Bold" FontSize="12" Height="28">Open:</Label> <Label Grid.Row="2" Grid.Column="1" Name="openPriceValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.OpeningPrice}"></Label> <Separator Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator5" Margin="0,2" /> <Label Grid.Row="4" Grid.Column="0" Name="yearlyTargetEstimatePrompt" FontWeight="Bold" FontSize="12" Height="28">1y Target Est:</Label> <Label Grid.Row="4" Grid.Column="1" Name="yearlyTargetEstimateValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.YearTargetEstimate}"></Label> <Separator Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator6" Margin="0,2" /> <Label Grid.Row="6" Grid.Column="0" Name="stockDaysRangePrompt" FontWeight="Bold" FontSize="12" Height="28">Day Range:</Label> <Label Grid.Row="6" Grid.Column="1" Name="stockDaysRangeValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.DaysRange}"></Label> <Separator Grid.Row="7" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator7" Margin="0,2" /> <Label Grid.Row="8" Grid.Column="0" Name="stockYearsRangePrompt" FontWeight="Bold" FontSize="12" Height="28">52wk Range:</Label> <Label Grid.Row="8" Grid.Column="1" Name="stockYearsRangeValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.YearsRange}"></Label> <Separator Grid.Row="9" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator8" Margin="0,2" /> <Label Grid.Row="10" Grid.Column="0" Name="averageVolumePrompt" FontWeight="Bold" FontSize="12" Height="28">Avg Vol (3m):</Label> <Label Grid.Row="10" Grid.Column="1" Name="averageVolumeValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.AverageVolume}"></Label> <Separator Grid.Row="11" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator9" Margin="0,2" /> <Label Grid.Row="12" Grid.Column="0" Name="marketCapPrompt" FontWeight="Bold" FontSize="12" Height="28">Market Cap:</Label> <Label Grid.Row="12" Grid.Column="1" Name="marketCapValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.MarketCap}"></Label> <Separator Grid.Row="13" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator10" Margin="0,2" /> <Label Grid.Row="14" Grid.Column="0" Name="priceEarningRatioPrompt" FontWeight="Bold" FontSize="12" Height="28">P/E (ttm):</Label> <Label Grid.Row="14" Grid.Column="1" Name="priceEarningRatioValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.PriceEarningsRatio}"></Label> <Separator Grid.Row="15" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator11" Margin="0,2" /> <Label Grid.Row="16" Grid.Column="0" Name="earningsPerSharePrompt" FontWeight="Bold" FontSize="12" Height="28">EPS (ttm):</Label> <Label Grid.Row="16" Grid.Column="1" Name="earningsPerShareValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.EarningsPerShare}"></Label> <Separator Grid.Row="17" Grid.Column="0" Grid.ColumnSpan="2" Name="stockSeparator12" Margin="0,2" /> <Label Grid.Row="18" Grid.Column="0" Name="dividendYieldPrompt" FontWeight="Bold" FontSize="12" Height="28">Div &amp; Yield:</Label> <Label Grid.Row="18" Grid.Column="1" Name="dividendYieldValue" FontWeight="Bold" FontSize="12" Height="28" Content="{Binding StockDetails.DividendYield}"></Label> </Grid> </Expander> </StackPanel> </DataTemplate> <DataTemplate x:Key="ChartCell"> <StackPanel> <Expander Header="Chart..." BorderBrush="DarkBlue" Width="200" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Image Name="stockGraph" Stretch="None" Source="{Binding StockChart}"/> </Expander> </StackPanel> </DataTemplate> </Window.Resources> 

Here is the list:

  <TabItem Name="myStocksTab" Header="My Stocks" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <StackPanel Name="myStocksTabContainerPanel" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Label Name="myStocksPrompt" Foreground="GhostWhite" Background="DarkBlue" FontSize="16" FontWeight="Bold">My Stocks</Label> <ListView Name="stocksUIList" ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch"> <ListView.View> <GridView> <GridViewColumn Header="Action" CellTemplate="{StaticResource ButtonsCell}" Width="Auto"/> <GridViewColumn Header="Company/Stock Symbol" Width="Auto" DisplayMemberBinding="{Binding CompanyName}"/> <GridViewColumn Header="Last Trade" Width="Auto" DisplayMemberBinding="{Binding LastTrade}"/> <GridViewColumn Header="Trade Time" Width="Auto" DisplayMemberBinding="{Binding StockDetails.TradeTime}"/> <GridViewColumn Header="Change" CellTemplate="{StaticResource StockPriceChangeCell}"/> <GridViewColumn Header="Volume" Width="Auto" DisplayMemberBinding="{Binding TradingVolume}"/> <GridViewColumn Header="Details" CellTemplate="{StaticResource DetailsCell}" Width="215"/> <GridViewColumn Header="Chart" CellTemplate="{StaticResource ChartCell}" Width="215"/> </GridView> </ListView.View> </ListView> <Button Name="addStock" FontSize="14" FontWeight="Bold" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Click="AddCompanyStock">Add Stock...</Button> </StackPanel> 
+3
listview wpf collapse expander
source share
2 answers

I know this is an older post, but I was looking for a solution to this problem and wanted to update it with my solution.

After some searches, I was able to fix this using the solution found here: ListView with a nested extender that does not reset

I mainly used ListView with extenders in the element template. When smoothing, the expander will not resize correctly. Also, when the contents of the expander were larger than the ListView, scrolling would not work properly.

The fix was simply replacing the ListView with the ItemsControl and setting the ItemsControl inside the ScrollViewer.

+1
source share

It looks like there may be a layout error in the ListView. Have you tried calling InvalidateVisual () on a ListView in the Collapsed event of any of the expanders? This can do the trick.

0
source share

All Articles