2010-03-18 2 views

Répondre

1

Vous pouvez utiliser un convertisseur pour calculer la hauteur en fonction de la hauteur de la fenêtre, quelque chose comme ça ...

Vous devez passer le Window.ActualHeight dans le convertisseur - il retourne alors la hauteur de la fenêtre multipliée par 0,75. Si, pour une raison quelconque, lorsque le convertisseur est touché, Window.ActualHeight est null (ou que vous avez accidentellement passé quelque chose qui ne peut pas être converti en double), il retournera double.NaN, qui définira la hauteur de Auto.

public class ControlHeightConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
          System.Globalization.CultureInfo culture) 
    { 
     double height = value as double; 

     if(value != null) 
     { 
      return value * 0.75; 
     } 
     else 
     { 
      return double.NaN; 
     } 
    } 
} 

Bind ceci à votre contrôle comme si ... (évidemment, cela est une version très découpée en bas du XAML!)

<Window x:Name="MyWindow" 
    xmlns:converters="clr-namespace:NamespaceWhereConvertersAreHeld"> 
    <Window.Resources> 
    <ResourceDictionary> 
     <converters:ControlHeightConverter x:Key="ControlHeightConverter"/> 
    </ResourceDictionary> 
    </Window.Resources> 

    <ListView MaxHeight="{Binding 
     ElementName=MyWindow, Path=ActualHeight, 
     Converter={StaticResource ControlHeightConverter}}"/> 
</Window>  
+0

J'ai essayé cette approche, et cela fonctionne très bien, mais quand je redimensionne la fenêtre, le convertisseur ne reçoit pas de coup, donc le MaxHeight ne change pas en conséquence. Une idée de comment réparer ça? – Muis

3

Une autre approche (sans convertisseur) serait simplement lieu dans une grille en étoile. Certes, cela met des restrictions sur votre mise en page. Donc, cela dépend de l'autre contenu si cette approche peut être utilisée ou non.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="0.75*"/> 
     <RowDefinition Height="0.25*"/> 
    </Grid.RowDefinitions> 

    <ListView Grid.Row="0" VerticalAlignment="Top"/> 
    <!-- some other content --> 

</Grid> 

Puisque vous vouliez la specifiy MaxHeight de ListView, j'ai mis la VerticalAlignment-Top, de sorte qu'il n'utilise pas tout l'espace disponible si elle n'est pas nécessaire. Bien sûr, vous pouvez également régler ceci à Bottom ou Stretch, en fonction de vos besoins.

Questions connexes