Próbuję zmienić SourceRect CroppedBitmap w czasie wykonywania

Gdy próbuję zmienić właściwość SourceRect CroppedBitmap w czasie wykonywania, nic się nie dzieje. Nie ma błędu, a wartość właściwości nie ulega zmianie.

Próbuję zrobić animację sprite. Mam źródło BitmapSource, które zawiera arkusz sprite, który jest pojedynczą bitmapą zawierającą siatkę różnych pozycji dla ikonki. Następnie mam mapę CroppedBitmit, która ma arkusz sprite jako źródło, i SourceRect, który wyciąga jedną z pozycji z arkusza sprite. W czasie wykonywania, gdy chcę animować, próbuję zmienić właściwość SourceRect CroppedBitmap, aby wyciągnąć inną pozę z większej mapy bitowej; ale, jak wspomniano powyżej, nowa wartość właściwości po prostu się nie trzyma. To najdziwniejsza rzecz.

Oto przykład 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>

I kod usiłuje to zrobić:

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

To daje mi ten wynik debugowania:

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

W rzeczywistości przypisuje nowy prostokąt (z Y = 0) do właściwości; nie ma wyjątku; ale potem wartość właściwości po prostu się nie zmieniła (Y nadal wynosi 640).

Jakieś pomysły na to, dlaczego tak się dzieje i jak to naprawić?

questionAnswers(3)

yourAnswerToTheQuestion