2010-03-18 17 views

Odpowiedz

1

Można użyć konwertera obliczyć wysokość w oparciu o wysokość okna, coś takiego ...

Trzeba zdać Window.ActualHeight do konwertera - będzie następnie powrócić wysokość okna pomnożonej przez 0,75. Jeśli z jakiegoś powodu, kiedy konwerter zostanie uderzony, Window.ActualHeight ma wartość NULL (lub przypadkowo przekazałeś coś, co nie może być rzutowane na podwójne), zwróci double.NaN, która ustawi wysokość na Automatyczny.

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 to do sterowania tak jak ... (oczywiście jest to bardzo cut-down wersja 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

Próbowałem tego podejścia, i działa dobrze, ale gdy zmieniam rozmiar okna, konwerter nie dostaje trafienia, więc MaxHeight nie zmienia się odpowiednio. Masz pomysł, jak to naprawić? – Muis

3

Innym podejściem (bez konwertera) byłoby po prostu miejsce to w siatkę o wielkości gwiazdy. Oczywiście, nakłada to pewne ograniczenia na twój układ. Zależy więc od innych treści, czy można zastosować to podejście, czy też nie.

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

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

</Grid> 

Ponieważ chciał specifiy się maxheight ListView, mam ustawić VerticalAlignment do Top, tak, że nie wykorzystuje całej dostępnej przestrzeni, jeśli nie jest to konieczne. Oczywiście można również ustawić to na Bottom lub Stretch, w zależności od wymagań.

Powiązane problemy