Come associare un ListView MaxHeight all'altezza attuale di Windows?Come associare un valore di ListHeight all'altezza attuale di Windows?
Mi piacerebbe limitare l'altezza per dire 3/4 dell'altezza di windows.
Come posso farlo?
Come associare un ListView MaxHeight all'altezza attuale di Windows?Come associare un valore di ListHeight all'altezza attuale di Windows?
Mi piacerebbe limitare l'altezza per dire 3/4 dell'altezza di windows.
Come posso farlo?
Si potrebbe utilizzare un convertitore per calcolare l'altezza in base all'altezza della finestra, qualcosa di simile ...
È necessario passare la Window.ActualHeight nel convertitore - sarà poi tornare l'altezza della finestra, moltiplicato per 0.75. Se, per qualsiasi ragione, quando viene colpito il convertitore, Window.ActualHeight è nullo (o hai accidentalmente passato qualcosa che non può essere lanciato su un doppio) restituirà double.NaN, che imposterà l'altezza a 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 questo per il vostro controllo in questo modo ... (ovviamente questa è una versione molto cut-down del 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>
Un altro approccio (senza convertitore) sarebbe semplicemente posto in una griglia di dimensioni stellari. Certamente, questo mette alcune restrizioni sul tuo layout. Quindi, dipende dal contenuto dell'altro se questo approccio può essere usato o meno.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.75*"/>
<RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>
<ListView Grid.Row="0" VerticalAlignment="Top"/>
<!-- some other content -->
</Grid>
Dal momento che si voleva essere indicate le MaxHeight del ListView, ho impostato il VerticalAlignment
-Top
, in modo che non utilizza tutto lo spazio disponibile, se non è necessario. Naturalmente, è possibile impostare anche questo su Bottom
o Stretch
, in base alle proprie esigenze.
Ho provato questo approccio, e funziona bene, ma quando ridimensiono la finestra, il convertitore non viene colpito, quindi il MaxHeight non cambia di conseguenza. Qualche idea su come sistemarlo? – Muis