J'ai une fenêtre WPF avec SizeToContent="Height"
. Cette fenêtre contient un <Expander />
qui affiche une liste des activités récentes. Ce que j'aimerais, c'est que lorsque l'expandeur est étendu, la fenêtre s'agrandisse proportionnellement. Lorsqu'il est masqué, la fenêtre se redimensionne à nouveau proportionnellement. Si la fenêtre est redimensionnée, l'expandeur et la liste qu'il contient doivent s'agrandir pour utiliser le nouvel espace. (ne faites pas attention aux couleurs qui sont là pour m'aider à comprendre) :
Vue normale
texte alternatif http://www.deploylx.com/so/wpfexpander/Open.png
Effondré
texte alternatif http://www.deploylx.com/so/wpfexpander/Closed.png
Redimensionné au nouvel espace
texte alternatif http://www.deploylx.com/so/wpfexpander/Expanded.png
Jusqu'à présent, cela fonctionne très bien. Le problème survient lorsque le <Expander />
se replie après le redimensionnement de la fenêtre. Plutôt que de réduire à nouveau la fenêtre, la vue de liste est simplement cachée :
Effondré après le redimensionnement
texte alternatif http://www.deploylx.com/so/wpfexpander/Collapsed.png
Mon intuition me dit que le Height
de la fenêtre est définie lorsque la fenêtre est redimensionnée et remplace donc l'option SizeToContent
propriété. Alors, comment puis-je faire en sorte que la fenêtre conserve son comportement de taille par rapport au contenu après avoir été redimensionnée ?
XAML actuel :
<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>
UPDATE : J'ai essayé d'écouter l'événement "Collapsed" de l'expandeur et de réinitialiser les paramètres de Windows. SizeToContent
propriété. Cela fonctionne presque. La fenêtre se referme, mais lorsqu'elle est à nouveau agrandie, elle retrouve sa hauteur initiale de 100 pixels. Bien qu'il soit possible de stocker et de capturer cette information, cela sent le bricolage et est sujet à des erreurs.