, , , 2 . , , , 200 . .
2 : , , . , IMultiValueConverter. , :
public class AutoColumnConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double imageWidth = values.OfType<double>().FirstOrDefault();
double gridWidth = values.OfType<double>().ElementAtOrDefault(1);
int minWidth = System.Convert.ToInt32(parameter);
double availableSpace = gridWidth - minWidth;
if (imageWidth > availableSpace)
return new GridLength(availableSpace, GridUnitType.Pixel);
return new GridLength(0, GridUnitType.Auto);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
, Grid , , Grid, , , , , . Source.Width, . , .
<Border>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="200" />
<ColumnDefinition>
<ColumnDefinition.Width>
<MultiBinding ConverterParameter="200">
<MultiBinding.Converter>
<local:AutoColumnConverter/>
</MultiBinding.Converter>
<Binding ElementName="Img" Path="Source.Width"/>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Border}}" Path="ActualWidth"/>
</MultiBinding>
</ColumnDefinition.Width>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<Image x:Name="Img" Grid.Column="1" Stretch="Uniform" StretchDirection="DownOnly"
Source="..."/>
</Grid>
</Border>