Der Versuch, das SourceRect einer CroppedBitmap zur Laufzeit zu ändern
Wenn ich versuche, die SourceRect-Eigenschaft einer CroppedBitmap zur Laufzeit zu ändern, geschieht nichts. Es liegt kein Fehler vor und der Eigenschaftswert wird nicht geändert.
Ich versuche Sprite-Animationen zu machen. Ich habe eine BitmapSource, die ein Spritesheet enthält. Hierbei handelt es sich um eine einzelne Bitmap, die ein Raster mit verschiedenen Posen für das Sprite enthält. Dann habe ich eine CroppedBitmap, die das Spritesheet als Quelle hat, und ein SourceRect, das eine der Posen aus dem Spritesheet zieht. Zur Laufzeit, wenn ich animieren möchte, versuche ich, die SourceRect-Eigenschaft der CroppedBitmap zu ändern, um eine andere Pose aus der größeren Bitmap zu ziehen. Wie oben erwähnt, bleibt der neue Eigenschaftswert jedoch einfach nicht erhalten. Es ist das Seltsamste.
Hier ist ein Beispiel für XAML:
<code><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> </code>
Und der Codebehind versucht dies zu tun:
<code>var newRect = new Int32Rect(...); Debug.WriteLine(" Before: " + image.SourceRect); Debug.WriteLine("Assigning new value: " + newRect); image.SourceRect = newRect; Debug.WriteLine(" After: " + image.SourceRect); </code>
Das gibt mir diese Debug-Ausgabe:
<code> Before: 240,640,240,320 Assigning new value: 240,0,240,320 After: 240,640,240,320 </code>
Es wird also tatsächlich das neue Rechteck (mit Y = 0) der Eigenschaft zugewiesen. es gibt keine Ausnahme; aber danach änderte sich der Eigenschaftswert einfach nicht (Y ist immer noch 640).
Irgendwelche Ideen, warum dies passiert und wie man es behebt?