Intentando cambiar el SourceRect de CroppedBitmap en tiempo de ejecución
Cuando intento cambiar la propiedad SourceRect de CroppedBitmap en tiempo de ejecución, no sucede nada. No hay error, y el valor de la propiedad en realidad no se modifica.
Estoy tratando de hacer animación de sprites. Tengo un BitmapSource que contiene una hoja de cálculo, que es un solo mapa de bits que contiene una cuadrícula de diferentes poses para el sprite. Luego tengo un CroppedBitmap que tiene la hoja de sprites como su Origen y un SourceRect que saca una de las poses de la hoja de sprites. En tiempo de ejecución, cuando quiero animar, estoy tratando de cambiar la propiedad SourceRect de CroppedBitmap, para sacar una pose diferente del mapa de bits más grande; pero, como se señaló anteriormente, el nuevo valor de la propiedad simplemente no se mantiene. Es la cosa más rara.
Aquí hay algunos ejemplos de 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>
Y el codigo siguiente intenta hacer esto:
var newRect = new Int32Rect(...);
Debug.WriteLine(" Before: " + image.SourceRect);
Debug.WriteLine("Assigning new value: " + newRect);
image.SourceRect = newRect;
Debug.WriteLine(" After: " + image.SourceRect);
Eso me da esta salida de depuración:
Before: 240,640,240,320
Assigning new value: 240,0,240,320
After: 240,640,240,320
Entonces, en realidad está asignando el nuevo rectángulo (con Y = 0) a la propiedad; no hay excepción pero después, el valor de la propiedad simplemente no cambió (Y sigue siendo 640).
¿Alguna idea sobre por qué sucede esto y cómo solucionarlo?