2

コントロールにイメージの固定部分を表示しようとしていますImage。Source はBitmapImage、ディスクまたは Web リソースのいずれかであり、非同期的にロードされます。

使ってみた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))

ArgumentExceptionWeb リソースからの読み込み時に、値が予想範囲外であるとのメッセージが表示されます。これは、イメージがまだロードされていないため、サイズがないためだと思います。

CroppedImage画像をプリロードすることなく、これを達成する方法はありますか (必ずしも を使用する必要はありません)。

BitmapImageところで:コントロールにソースとして直接与えることはImageうまくいきますが、もちろんこれはトリミングを行いません。

4

2 に答える 2

0

できることは、空のビットマップであるダミー ソースを作成することです。

var src = BitmapImage.Create(
                        500, // set to be big enough so it can be cropped
                        500, // set to be big enough so it can be cropped
                        96,
                        96,
                        System.Windows.Media.PixelFormats.Indexed1,
                        new BitmapPalette(new List<System.Windows.Media.Color> { System.Windows.Media.Colors.Transparent }),
                        new byte[] { 0, 0, 0, 0 },
                        1);

CroppedBitmap のソースとしてバインドされている Image プロパティをこのダミーに設定します。次に、実際の画像が読み込まれると、このダミーを実際の画像に置き換えるだけです。Imageプロパティを新しいソースに設定すると、バインディング システムが更新を処理する必要があります。

于 2013-10-25T21:12:21.097 に答える