Преобразовывает на WriteableBitmap - PullRequest
2 голосов
/ 12 января 2012

Я пишу приложение в WP7 mango и пытаюсь преобразовать изображение, загруженное из binded в WriteableBitmap в XAML, например, так:

<Grid>
    <ScrollViewer>
        <Image Source="{Binding SourceImage}">
            <Image.RenderTransform>
                <RotateTransform Angle="{Binding RotateAngle}"/>
            </Image.RenderTransform>
        </Image>
    </ScrollViewer>
</Grid> 

Я связываю Angle со своим свойством Angle в моей ViewModel, я изменяюот ползунка это значение, но изображение не вращается.Поднятие недвижимости изменилось, работает правильно.Когда я делаю это с загруженным из файла контекста изображением, статическим изображением, оно работает.

1 Ответ

2 голосов
/ 12 января 2012

Действительно странно.Я еще не понял, откуда возникла проблема, но вы можете обойти использование Projection вместо RenderTransform:

<Grid>
   <ScrollViewer>
       <Image Source="{Binding SourceImage}">
           <Image.Projection>
               <PlaneProjection RotationZ="{Binding RotateAngle}" />
           </Image.Projection>
       </Image>
   </ScrollViewer>
</Grid> 

Edit:

Хорошо, на самом деле кажетсяпроблема исходит от ScrollViewer, а не изображения.Установите RotateTransform непосредственно на ScrollViewer, и он должен работать:

<Grid>
   <ScrollViewer>
       <ScrollViewer.RenderTransform>
           <RotateTransform Angle="{Binding RotateAngle}" />
       </ScrollViewer.RenderTransform>
       <Image Source="{Binding SourceImage}" />
   </ScrollViewer>
</Grid> 

Или поместить изображение в сетку внутри ScrollPanel:

    <ScrollViewer>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
            </Grid.RowDefinitions>

            <Image Source="{Binding SourceImage}">
                <Image.RenderTransform>
                    <RotateTransform Angle="{Binding RotateAngle}" />
                </Image.RenderTransform>
            </Image>
        </Grid>
    </ScrollViewer>

Но я все еще не понимаю, почему этослучается.

Редактировать 2:

Хорошо, я нашел ошибку.Он был представлен в последних сборках WP7.По сути, scrollviewer перезапишет RenderTransform своего дочернего элемента, если он отличается от своего собственного.Итак, у вас есть три решения:

  • Определите RenderTransform непосредственно в ScrollViewer
  • Оберните ваш дочерний элемент в элемент-контейнер.Таким образом, rendertransform фиктивного элемента будет перезаписан, а не ваш:
  • При инициализации замените RotateTransform ScrollViewer на элемент:лично пойдите с первым или вторым решением.Боюсь, что с третьим решением могут возникнуть неожиданные побочные эффекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...