Я не уверен, что это то, что вам нужно, но один из способов сделать MaxHeight динамическим с Height
окна - это использовать RelativeSource
.Позвольте мне объяснить:
В вашем Grid
вы устанавливаете MaxHeight
как ActualHeight
Окна.Для этого вам просто нужно связать
MaxHeigth = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight}"
Теперь это не очень хорошее решение из-за того, что внутри окна есть поля, отступы и другие элементы.Итак, вы хотите сделать Grid
пропорциональным ActualHeight
.Поэтому вам нужен конвертер .
Я сделал это, который возвращает процент от значения.
public class SizePercentageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return 0:
if (parameter == null)
return (double)value;
var split = parameter.ToString().Split('.');
var parameterDouble = double.Parse(split[0]) + double.Parse(split[1]) / Math.Pow(10, split[1].Length);
return (double)value * parameterDouble;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// Don't need to implement this
return null;
}
Как только вы определили его в ResourceDictionary
<converters:SizePercentageConverter x:Key="PercentageConverter" />
Вы можете вызвать его в своем MaxHeight
.Например, если вы хотите, чтобы это было 70% от ActualHeight
, вам просто нужно написать
MaxHeight = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight, Converter={StaticResource PercentageConverter}, ConverterParameter=0.7}"
В противном случае, если вы также можете создать Converter , который вычел значение.Например, после связывания возвращается ActualHeight
- parameter
.
Я надеюсь, что это может помочь, и дайте мне знать, как это происходит.