WPF图像裁剪和绑定

时间:2014-04-09 15:41:08

标签: c# wpf binding

我有一个显示图像一部分的简单网格。

 <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。该剪辑似乎不想工作。有什么建议?任何人都有将剪辑绑定到图像的经验吗?

我需要能够以编程方式将特定图像分割为多个控件。使用剪辑作为要显示的每个控件的计算部分。

1 个答案:

答案 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'}" />