2010-03-18 3 views

cevap

1

... Sen dönüştürücü içine Window.ActualHeight geçmesi gerekiyor

- o zaman ile çarpılır pencere yüksekliğini dönecektir 0.75. Hangi nedenle olursa olsun, dönüştürücü vurulduğunda, Window.ActualHeight boştur (veya kazayla çift olarak gönderilemeyen bir şeye geçtiyseniz), double.NaN değerini döndürür. Oto.

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 bu yüzden gibi sizin kontrolünüz ... (Açıkçası bu xaml çok cut-down versiyonu!)

<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

Ben bu yaklaşımı denedik ve iyi çalışıyor, ama pencereyi isabet doesnt dönüştürücü yeniden boyutlandırma, bu yüzden ne zaman MaxHeight buna göre değişir etmez. Bunu düzeltmek için bir fikrin var mı? – Muis

3

(dönüştürücü olmadan) başka bir yaklaşım basitçe yer olacaktır yıldız boyutlu bir ızgarada. Elbette, bu sizin düzeninize bazı kısıtlamalar getiriyor. Dolayısıyla, bu yaklaşımın kullanılıp kullanılamayacağı diğer içeriğe bağlıdır. gerekli değilse tüm kullanılabilir alanı kullanmaz böylece ListView MaxHeight specifiy istedi beri

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

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

</Grid> 

, ben VerticalAlignmentTop için belirledik. Elbette, gereksinimlerinize bağlı olarak bunu Bottom veya Stretch olarak da ayarlayabilirsiniz.