我正在尝试在Image控件中显示Image的固定部分。源是来自磁盘或Web资源的BitmapImage,并且是异步加载的。

我尝试使用CroppedImage

<UserControl.Resources>
    <CroppedBitmap x:Key="croppedImage" Source="{Binding Image}" SourceRect="20 46 273 202"/>
</UserControl.Resources>
...
<Image x:Name="TemplateImage" Height="202" Width="273" HorizontalAlignment="Left" Source="{StaticResource croppedImage}"/>


尝试创建XamlParseException时会生成一个CroppedBitmap
我也在(C#)后面的代码中尝试过

new CroppedBitmap(Image, new System.Windows.Int32Rect(20, 46, 273, 202))


从网络资源加载时给我一个ArgumentException,说明该值超出了预期范围。我想这是由于图像尚未加载,因此没有大小。

有没有一种方法(不必使用CroppedImage)来完成此操作,而不必预加载图像?

顺便说一句:将BitmapImage作为源直接提供给Image控件可以正常工作,但是当然不能进行裁剪。

最佳答案

可以使用带有ImageBrush Fill的Rectangle来代替Image控件,并根据需要设置Viewbox:

<UserControl.Resources>
    <ImageBrush x:Key="croppedImage" ImageSource="{Binding Image}"
                ViewboxUnits="Absolute" Viewbox="20,46,273,202"/>
</UserControl.Resources>
...
<Rectangle Height="202" Width="273" Fill="{StaticResource croppedImage}"/>

10-07 22:20