Comment voulez-vous garder la fenêtre WPF taille de contenu avec un Expandeur après redimensionnement
J'ai une fenêtre WPF avec SizeToContent="Height"
. Cette fenêtre contient une <Expander />
qui affiche une liste des activités récentes. Ce que j'aimerais c'est lorsque l'extenseur est agrandi la fenêtre augmente la taille proportionnellement. Lorsqu'elle est cachée à nouveau la fenêtre est redimensionnée proportionnellement. Si la fenêtre est redimensionnée le réceptacle et c'est contenue affichage de la liste devrait croître à utiliser le nouvel espace. (ne vous occupez pas des couleurs il y a là, pour m'aider à comprendre cela):
Vue Normale
le texte d'alt http://www.deploylx.com/so/wpfexpander/Open.png
S'est effondré
le texte d'alt http://www.deploylx.com/so/wpfexpander/Closed.png
Redimensionnée à nouveau l'espace
le texte d'alt http://www.deploylx.com/so/wpfexpander/Expanded.png
Jusqu'à présent cela fonctionne très bien. Le problème vient quand la <Expander />
est effondré après la fenêtre est redimensionnée. Plutôt que la fenêtre s'effondrer à nouveau, la liste est tout simplement caché:
S'est effondré après Redimensionnement
le texte d'alt 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 le SizeToContent
de la propriété. Alors, comment puis-je obtenir la fenêtre pour en garder une taille au contenu de comportement après avoir été redimensionnée?
Actuel 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>
Mise à JOUR: j'ai essayé d'écouter l'effondrement de l'événement de l'expandeur et la réinitialisation de la Windows SizeToContent
de la propriété. Cela fonctionne presque. Il entraînera l'effondrement de nouveau la fenêtre, mais quand élargi encore, il va revenir à l'original de 100 pixels de hauteur. Alors qu'il est possible de stocker et de capturer cette info ça sent hacky et sujettes à erreurs.
Vous devez vous connecter pour publier un commentaire.
Vous avez pour faire de votre fenêtre non redimensionnables, si vous allez utiliser SizeToContent. Aussi, vous ne devriez pas utiliser SizeToContent="Hauteur", puis de définir explicitement la Hauteur. Pensez - y, ce qui devrait WPF crois que pour la hauteur de la fenêtre, les paramètres de l'utilisateur ou du Contenu? Il ne peut pas revenir en arrière et vient entre les deux.
La meilleure façon de faire face est de prendre le redimensionnement manuel de l'équation par la mise en
ResizeMode="NoResize"
sur la fenêtre. Cependant, si vous avezWindowStyle="None"
j'ai remarqué que sur Vista Aero cela provoque la fenêtre complètement versé le "chrome" et la fenêtre, l'air gêné. Aussi, ce peu d'un flic, car il semble que vous souhaitez donner à l'utilisateur le redimensionnement des capacités.Le problème, c'est que vous avez deux objectifs contradictoires: 1.) vous voulez toujours
SizeToContent="Height"
lors de l'effondrement de l'expanseur de contrôle, 2.) vous souhaitezSizeToContent="Height"
lors de l'expansion de l'expandeur de contrôle sauf l'utilisateur a redimensionné manuellement la fenêtre (SizeToContent="Manuel"), auquel cas vous souhaitez revenir à l'utilisateur manuel de la hauteur.Aïe. Je ne pense pas que vous pouvez obtenir autour de l'épargne l'élargissement de la hauteur. WPF ne me souviens pas de l'utilisateur manuel de la hauteur sur se détendre une fois que vous avez repris l'
SizeToContent="Height"
dans votre effondré gestionnaire d'événement.Essayer, cela devrait correspondre à vos besoins:
SizeToContent="WidthAndHeight" Height="Auto" Width="Auto"
Que j'ai découvert dans ma question, réglage de la Hauteur à Double.NaN provoque la remise à zéro de SizeToContent bonheur. Je ne sais pas si elle va se rappeler de la taille de votre expandeur bien. Vous pouvez essayer de Kent Resizer de contrôle pour déplacer le comportement de dimensionnement de l'extenseur, plutôt que le contenant de la fenêtre.
J'ai trouvé que le fait de mettre le corps de ma Fenêtre de Vue et en mettant ensuite le point de vue comme le seul enfant dans la fenêtre résolu des problèmes similaires...
Pas la solution la plus souhaitable, mais il semble fonctionner.