当我尝试在运行时更改 CroppedBitmap 的 SourceRect 属性时,没有任何反应。没有错误,并且属性值实际上并没有改变。
我正在尝试做精灵动画。我有一个包含精灵表的 BitmapSource,它是一个包含精灵不同姿势网格的单个位图。然后我有一个以 spritesheet 作为其源的 CroppedBitmap,以及一个从 spritesheet 中拉出其中一个姿势的 SourceRect。在运行时,当我想制作动画时,我试图更改 CroppedBitmap 的 SourceRect 属性,以从较大的位图中拉出不同的姿势;但是,如上所述,新的属性值根本不成立。这是最奇怪的事情。
这是一些示例 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)。
关于为什么会发生这种情况以及如何解决它的任何想法?