基于其他控件"宽度"设置"宽度"



我正在尝试根据同一Grid列(Grid.Column="0"(中另一个控件的Width设置宽度为600px的图像的Width。有没有一种方法可以捕捉该元素(MenuControl(的Width,并将该数字放在图像Width中,以获得低于600px的值?

<DockPanel Grid.Row="1" Grid.Column="0">
<Image Source="/Assets/combanc.png" Margin="10" Width="{Binding ElementName=MenuControl, Path=ActualWidth}" />
</DockPanel>

如果我正确理解您的问题,您希望绑定另一个控件的大小,但无论其他控件的大小如何,图像都不应超过最大大小600。您可以创建一个值转换器,返回绑定大小的最小值和参数化的最大值。

public class MaximumSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is double size) ||
!(parameter is string maximumText) ||
!double.TryParse(maximumText, out var maximum))
return Binding.DoNothing;
return Math.Min(size, maximum);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException();
}
}

然后,您可以在范围内的资源字典中创建转换器的实例,例如Grid.Resources,并在ImageWidth绑定中使用它。通过在Converter属性中引用转换器来指定转换器,并将最大值设置为ConverterParameter

<Grid>
<Grid.Resources>
<local:MaximumSizeConverter x:Key="MaximumSizeConverter"/>
</Grid.Resources>
<!-- ...your other markup. -->
<DockPanel Grid.Row="1" Grid.Column="0">
<Image Source="/Assets/combanc.png" Margin="10" Width="{Binding ElementName=MenuControl, Path=ActualWidth, Converter={StaticResource MaximumSizeConverter}, ConverterParameter=600}" />
</DockPanel>
</Grid>

最新更新