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?