実行時に CroppedBitmap の SourceRect プロパティを変更しようとしても、何も起こりません。エラーは発生せず、プロパティ値は実際には変更されません。
スプライトアニメーションを作ろうとしています。スプライトシートを含む BitmapSource があります。これは、スプライトのさまざまなポーズのグリッドを含む単一のビットマップです。次に、ソースとしてスプライト シートを持つ CroppedBitmap と、スプライト シートからポーズの 1 つを引き出す SourceRect があります。実行時にアニメーション化する必要がある場合は、CroppedBitmap の SourceRect プロパティを変更して、より大きなビットマップから別のポーズを引き出します。しかし、上で述べたように、新しいプロパティ値は単純に固執しません。それは最も奇妙なことです。
XAML のサンプルを次に示します。
<UserControl.Resources>
<BitmapImage x:Key="spritesheet" UriSource="Sprites/elf.png"/>
</UserControl.Resources>
<Image>
<Image.Source>
<CroppedBitmap x:Name="image" Source="{StaticResource spritesheet}"
SourceRect="240 640 240 320"/>
</Image.Source>
</Image>
そしてコードビハインドはこれをしようとします:
var newRect = new Int32Rect(...);
Debug.WriteLine(" Before: " + image.SourceRect);
Debug.WriteLine("Assigning new value: " + newRect);
image.SourceRect = newRect;
Debug.WriteLine(" After: " + image.SourceRect);
これにより、次のデバッグ出力が得られます。
Before: 240,640,240,320
Assigning new value: 240,0,240,320
After: 240,640,240,320
つまり、実際には新しい四角形 (Y=0) をプロパティに割り当てています。例外はありません。しかしその後、プロパティ値はまったく変化しませんでした (Y は 640 のままです)。
なぜこれが起こるのか、そしてそれを修正する方法についてのアイデアはありますか?