我有一个显示一部分图像的简单网格。
<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>
Run Code Online (Sandbox Code Playgroud)
我也尝试在后面的代码中直接绑定到RectangleGeometry。该剪辑似乎不想工作。有什么建议么?任何人都具有将剪辑绑定到图像的经验吗?
我需要能够以编程方式在多个控件上分割特定图像。使用剪辑作为要显示的每个控件的计算部分。
如果您只想显示图像的一部分,则可以CroppedBitmap用作Image.Source
<Image>
<Image.Source>
<CroppedBitmap Source="/NameSpace;component/Resources/image.jpg" SourceRect="{Binding RectGeo}"/>
</Image.Source>
</Image>
Run Code Online (Sandbox Code Playgroud)
您可以绑定,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();
}
}
Run Code Online (Sandbox Code Playgroud)
并与您的绑定一起使用:
<Image ... Source="{Binding Path=RectGeo, Converter={StaticResource CropBitmapConverter}, ConverterParameter='pack://application:,,,/NameSpace;component/Resources/image.jpg'}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1083 次 |
| 最近记录: |