Tentando alterar o SourceRect de um CroppedBitmap em tempo de execução

Quando tento alterar a propriedade SourceRect de CroppedBitmap em tempo de execução, nada acontece. Não há erro e o valor da propriedade não é alterado.

Eu estou tentando fazer animação de sprites. Eu tenho um BitmapSource que contém uma spritesheet, que é um único bitmap contendo uma grade de poses diferentes para o sprite. Então eu tenho um CroppedBitmap que tem o spritesheet como sua fonte e um SourceRect que puxa uma das poses fora da spritesheet. Em tempo de execução, quando quero animar, estou tentando alterar a propriedade SourceRect do CroppedBitmap, para extrair uma pose diferente do bitmap maior; mas, como observado acima, o novo valor da propriedade simplesmente não se fixa. É a coisa mais estranha.

Aqui está um exemplo de 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>

E o codebehind tenta fazer isso:

<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>

Isso me dá essa saída de depuração:

<code>             Before: 240,640,240,320
Assigning new value: 240,0,240,320
              After: 240,640,240,320
</code>

Então, é realmente atribuir o novo retângulo (com Y = 0) à propriedade; não há exceção; mas depois, o valor da propriedade simplesmente não mudou (Y ainda é 640).

Alguma idéia sobre por que isso acontece e como corrigi-lo?

questionAnswers(3)

yourAnswerToTheQuestion