Когда я пытаюсь изменить свойство SourceRect CroppedBitmap во время выполнения, ничего не происходит. Там нет ошибки, и значение свойства фактически не изменяется.
Я пытаюсь сделать спрайт-анимацию. У меня есть BitmapSource, который содержит спрайт-лист, который является одним растровым изображением, содержащим сетку разных поз для спрайта. Затем у меня есть CroppedBitmap, в котором в качестве источника используется таблица спрайтов, и SourceRect, который вытягивает одну из поз из таблицы спрайтов. Во время выполнения, когда я хочу анимировать, я пытаюсь изменить свойство SourceRect CroppedBitmap, чтобы вытянуть другую позу из большего растрового изображения; но, как отмечено выше, новое значение свойства просто не прилипает. Это самая странная вещь.
Вот пример 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>
И кодовый код пытается сделать это:
var newRect = new Int32Rect(...);
Debug.WriteLine(" Before: " + image.SourceRect);
Debug.WriteLine("Assigning new value: " + newRect);
image.SourceRect = newRect;
Debug.WriteLine(" After: " + image.SourceRect);
Это дает мне этот отладочный вывод:
Before: 240,640,240,320
Assigning new value: 240,0,240,320
After: 240,640,240,320
Таким образом, фактически присваивается новый прямоугольник (с Y = 0) в свойство; нет исключения; но после этого значение свойства просто не изменилось (Y по-прежнему 640).
Есть идеи о том, почему это происходит и как это исправить?