我在WP7芒果中编写应用程序并尝试将从binded加载的图像转换为XAML中的WriteableBitmap,例如:
<Grid>
<ScrollViewer>
<Image Source="{Binding SourceImage}">
<Image.RenderTransform>
<RotateTransform Angle="{Binding RotateAngle}"/>
</Image.RenderTransform>
</Image>
</ScrollViewer>
</Grid>
我在我的ViewModel中将Angle与我的属性Angle绑定,我从滑块更改此值,但图像不会旋转。提高财产变化是正确的。 当我使用从contets文件,静态图像加载的图像时,它可以工作。
答案 0 :(得分:2)
真的很奇怪。我还没有明白问题的来源,但你可以使用Projection代替RenderTransform:
<Grid>
<ScrollViewer>
<Image Source="{Binding SourceImage}">
<Image.Projection>
<PlaneProjection RotationZ="{Binding RotateAngle}" />
</Image.Projection>
</Image>
</ScrollViewer>
</Grid>
修改强>
好吧,实际上看起来问题来自ScrollViewer而不是Image。直接在ScrollViewer上设置RotateTransform,它应该可以工作:
<Grid>
<ScrollViewer>
<ScrollViewer.RenderTransform>
<RotateTransform Angle="{Binding RotateAngle}" />
</ScrollViewer.RenderTransform>
<Image Source="{Binding SourceImage}" />
</ScrollViewer>
</Grid>
或者将Image放在ScrollPanel内的Grid中:
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Image Source="{Binding SourceImage}">
<Image.RenderTransform>
<RotateTransform Angle="{Binding RotateAngle}" />
</Image.RenderTransform>
</Image>
</Grid>
</ScrollViewer>
但是我仍然不知道为什么会这样。
编辑2:
好的,我发现了这个错误。它已在最后的WP7版本中引入。基本上,如果滚动查看器与其自己的不同,则会覆盖其子项的RenderTransform。 所以你有三个解决方案:
在初始化时,将ScrollViewer的RotateTransform替换为元素:
public MainPage()
{
this.InitializeComponent();
this.ScrollViewer.RenderTransform = this.Image.RenderTransform;
}
我会个人采用第一种或第二种解决方案。我担心第三种解决方案会出现意想不到的副作用。