我有一个显示图像一部分的简单网格。
<Grid x:Name="back_side" Margin="-1" RenderTransformOrigin="0.5,0.5" RenderTransform="{Binding ScaleTransformBack}" Width="Auto">
<Image Source="/NameSpace;component/Resources/image.jpg" Stretch="Fill">
<Image.Clip>
<RectangleGeometry Rect="{Binding RectGeo}"/>
</Image.Clip>
</Image>
</Grid>
我也试过在代码后面直接绑定到RectangleGeometry。该剪辑似乎不想工作。有什么建议?任何人都有将剪辑绑定到图像的经验吗?
我需要能够以编程方式将特定图像分割为多个控件。使用剪辑作为要显示的每个控件的计算部分。
答案 0 :(得分:5)
如果您只想显示部分图片,可以使用CroppedBitmap
作为Image.Source
<Image>
<Image.Source>
<CroppedBitmap Source="/NameSpace;component/Resources/image.jpg" SourceRect="{Binding RectGeo}"/>
</Image.Source>
</Image>
您可以绑定CroppedBitmap.SourceRect
,但需要确保RectGeo
属于Int32Rect
类型
修改强>
不幸的是,如果您计划在运行时更改SourceRect
,那么它将无法正常工作:
初始化后,将忽略属性更改
所以你可以做的是创建自定义IValueConverter
,这将创建一个CroppedBitmap
:
public class CropBitmapConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return new CroppedBitmap(new BitmapImage(new Uri((string)parameter, UriKind.RelativeOrAbsolute)), (Int32Rect)value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
并将其用于绑定:
<Image ... Source="{Binding Path=RectGeo, Converter={StaticResource CropBitmapConverter}, ConverterParameter='pack://application:,,,/NameSpace;component/Resources/image.jpg'}" />