在WriteableBitmap上进行转换

时间:2012-01-11 21:16:04

标签: c# xaml windows-phone-7

我在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文件,静态图像加载的图像时,它可以工作。

1 个答案:

答案 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上定义RenderTransform
  • 将您的子元素包装在虚容器元素中。这样,虚拟元素的rendertransform就会被覆盖而不是你的:                                                                
  • 在初始化时,将ScrollViewer的RotateTransform替换为元素:

    public MainPage()
    {
        this.InitializeComponent();
    
        this.ScrollViewer.RenderTransform = this.Image.RenderTransform;
    }
    

我会个人采用第一种或第二种解决方案。我担心第三种解决方案会出现意想不到的副作用。