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 je voudrais, c'est que lorsque l'expandeur est agrandi, la fenêtre grossit proportionnellement. Lorsque caché, la fenêtre se redimensionne proportionnellement. Si la fenêtre est redimensionnée, l'expanseur et sa vue de liste contenue devraient croître pour utiliser le nouvel espace. (Ne me dérange pas les couleurs là là pour me aider à comprendre cela):Comment gardez-vous la fenêtre WPF de taille au contenu d'un élargisseur après redimensionnez
Vue normale
alt text http://www.deploylx.com/so/wpfexpander/Open.png
Collapsed
alt text http://www.deploylx.com/so/wpfexpander/Closed.png
redimensionnée à nouveau
alt text http://www.deploylx.com/so/wpfexpander/Expanded.png
Jusqu'à présent, cela fonctionne très bien. Le problème survient lorsque le <Expander />
est réduit après le redimensionnement de la fenêtre. Plutôt que la fenêtre s'effondrer à nouveau, la vue de la liste est simplement cachée:
Collapsed après Redimensionner
alt text http://www.deploylx.com/so/wpfexpander/Collapsed.png
Mon intuition me dit que la Height
de la fenêtre est en cours d'lorsque la fenêtre est redimensionnée et remplace donc la propriété SizeToContent
. Alors, comment puis-je obtenir la fenêtre pour garder sa taille au comportement du contenu après qu'il a été redimensionné?
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>
MISE À JOUR: J'ai essayé d'écouter l'événement Effondré de l'extension et la réinitialisation de la propriété de Windows SizeToContent
. Cela fonctionne presque. Cela l'obligera à replier la fenêtre à nouveau, mais quand il sera à nouveau déployé, il reviendra à la hauteur initiale de 100 pixels. Alors qu'il est possible de stocker et de capturer cette information, il sent hacky et sujettes à des erreurs.
Ouais ... réinitialiser la propriété SizeToContent a le même effet de base, mais alors vous perdez étendu : –
Est-ce que quelqu'un peut expliquer ce que Tom veut dire? Comment définir la hauteur ou la largeur de Double.NaN? – DeveloperDan
En réaction à certains événements, vous pouvez définir Control.Height = Double.Nan; – Thomas