我正在尝试根据同一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
,并在Image
的Width
绑定中使用它。通过在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>