У меня есть окно WPF с SizeToContent="Height"
. Это окно содержит <Expander />
, который отображает список последних действий. Что бы я хотел, это когда расширитель расширяется, пропорционально увеличивается размер окна. Когда скрыто окно снова изменяется пропорционально. Если размер окна изменен, расширитель и содержащийся в нем список должны увеличиться, чтобы использовать новое пространство. (не берите в голову цвета там, чтобы помочь мне понять это):
Обычный вид
альтернативный текст http://www.deploylx.com/so/wpfexpander/Open.png
Свернутые
альтернативный текст http://www.deploylx.com/so/wpfexpander/Closed.png
Изменение размера на новое пространство
альтернативный текст http://www.deploylx.com/so/wpfexpander/Expanded.png
Пока это прекрасно работает. Проблема возникает, когда <Expander />
свернут после изменения размера окна. Вместо того, чтобы снова свернуть окно, представление списка просто скрыто:
Свернулся после изменения размера
альтернативный текст http://www.deploylx.com/so/wpfexpander/Collapsed.png
Моя интуиция говорит мне, что Height
окна устанавливается при изменении размера окна и, таким образом, переопределяет свойство SizeToContent
. Итак, как я могу получить окно, чтобы сохранить его размер в зависимости от поведения содержимого после его изменения?
Текущий XAML:
<Window x:Class="DeployLX.Licensing.Nlm.Admin.v3.DashboardWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Dashboard" Width="504" SizeToContent="Height" Height="275">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="E_xit" Command="{Binding Path=CloseCmd}" />
</MenuItem>
</Menu>
<Grid DockPanel.Dock="Top" Margin="8" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Margin="0,0,8,0">
<Rectangle Fill="Red" />
<TextBlock>ActiveCount</TextBlock>
</Grid>
<Grid Grid.Row="0" Grid.Column="1" Margin="0,0,0,4">
<Rectangle Fill="Green" />
<TextBlock>Authorization</TextBlock>
</Grid>
<Grid Grid.Row="1" Grid.Column="1" Margin="0,4,0,0">
<Rectangle Fill="Blue" />
<TextBlock>Authorization</TextBlock>
</Grid>
</Grid>
<Expander Header="Recent Activity" Margin="8" IsExpanded="True">
<ListView IsSynchronizedWithCurrentItem="True" MinHeight="100">
<ListView.View>
<GridView>
<GridViewColumn Header="Status"/>
</GridView>
</ListView.View>
</ListView>
</Expander>
</DockPanel>
</Window>
ОБНОВЛЕНИЕ: Я попытался прослушать событие Collapsed модуля развертывания и сбросить свойство Windows SizeToContent
. Это почти работает. Это заставит его снова свернуть окно, но при повторном расширении оно вернется к исходной высоте в 100 пикселей. Хотя эту информацию можно хранить и фиксировать, она пахнет хаотично и подвержена ошибкам.