2010-07-13 8 views
0

Je souhaite que ma taille de fenêtre corresponde aux éléments de la liste. La liste contient des chaînes de longueur variable (20 à 120 caractères). Lorsque je fais défiler la liste et que les chaînes plus longues dans la liste déroulante défilent, la liste déroulante rétrécit et ma fenêtre rétrécit. Comment puis-je garder ma taille de fenêtre fixe pendant que l'utilisateur défile tout en conservant la taille initiale de la fenêtre au contenu. Tu sais, gâteaux et mange aussi.Fenêtre WPF redimensionnée lorsque ListBox défile

<Window x:Class="MyApp.MyDialog 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:MyApp" 
xmlns:sys="clr-namespace:System;assembly=mscorlib"   
Title="My Dialog" MaxHeight="600" SizeToContent="WidthAndHeight" ShowInTaskbar="False" Width="Auto" Height="Auto" Loaded="Window_Loaded"> 

<Grid Width="Auto" Height="Auto" Margin="5,5,5,5"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition></RowDefinition> 
     <RowDefinition Height="48" ></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <StackPanel Orientation="Horizontal" Grid.Row="0" > 
     <TextBlock>Total: </TextBlock> 
     <TextBlock Text="{Binding myData.Count}"></TextBlock> 
    </StackPanel> 
    <ListBox Grid.Row="1" ItemsSource="{Binding myData}"/> 
    <Button Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Height="28" Click="buttonOK_Click" Margin="0,5,0,5" IsDefault="True" Name="buttonOK" Width="75">OK</Button> 
</Grid> 

Répondre

0

Je pense que vous devez supprimer votre propriété sizeToContent et redimensionner vos fenêtres programatically que vous le souhaitez en fonction de votre contenu listbox.

0

J'ai, à l'occasion, eu l'exigence qu'une taille de fenêtre pour s'adapter initialement à son contenu, puis garder la taille fixe, sauf si explicitement redimensionné. En règle générale, j'accrocherais simplement l'événement ContentRendered de la fenêtre et efface la propriété SizeToContent dans le gestionnaire d'événements (et décoche également l'événement). Cela garantit que la mise en page est entièrement terminée et que la fenêtre a été affichée et ses limites entièrement calculées au moment où vous revenez à une taille fixe.

Cette solution n'est pas la meilleure au monde, et elle se décompose lorsque votre contenu n'est pas entièrement disponible lorsque l'événement ContentRendered se déclenche. L'exemple le plus probable que je puisse penser serait si les données dans votre modèle de vue ne sont pas encore disponibles, et, par conséquent, votre vue n'est pas encore entièrement remplie. Cela peut ne pas être un problème pour vous - cela dépend de votre conception et si vous effectuez un chargement de données différé/asynchrone. Mais cela fonctionne dans des scénarios plus simples, et il a la vertu d'être simple à mettre en œuvre.

Questions connexes