Как программно найти масштаб, повернуть и перевести значения при использовании MultiTouchBehavior в приложении Silverlight / WP7? - PullRequest
2 голосов
/ 18 января 2011

Хорошо, это может показаться глупым вопросом, но я еще не совсем привык к царству Silverlight. Я работаю над приложением Silverlight / WP7, которое ссылается на проект кодового комплекса Multitouch.Behaviors.WP7 (http://multitouch.codeplex.com/).

<Canvas x:Name="MyCanvas">
      <Image Source="Images/image.png"
           x:Name="MyImage" Width="120" 
           Canvas.Left="240" Canvas.Top="235">
            <i:Interaction.Behaviors>
                <tb:MultiTouchBehavior
        AreFingersVisible="True" 
        IsDebugModeActive="True" 
        IsMockActive="True" 
        IsRotateEnabled="True" 
        IsScaleEnabled="True" 
        IsTranslateXEnabled="True" 
        IsTranslateYEnabled="True" 
        MaximumScale="100"  
        MinimumScale="0.5"/>
       </i:Interaction.Behaviors>
  </Image>

Очевидно, что пользователь может перетаскивать изображение, поворачивать его и масштабировать с помощью функции мультитач. Как я могу получить доступ к значениям того, как изображение было масштабировано / повернуто / переведено программно?

Ответы [ 2 ]

5 голосов
/ 18 января 2011

MultitouchBehavior использует CompositeTransform в качестве RenderTransform для объекта, с которым связанТаким образом, вы можете использовать код, подобный следующему, для доступа к преобразованным значениям:

var transform = this.MyImage.RenderTransform as CompositeTransform;
var currentScaleX = transform.ScaleX;
var angle = transform.Rotation;
var offsetX = transform.TranslateX;
0 голосов
/ 18 января 2011

Вам необходимо использовать Image.RenderTransform. Смотрите этот пост (особенно раздел GestureHelper - http://timheuer.com/blog/archive/2010/09/16/silverlight-toolkit-for-windows-phone-7-released.aspx).

<Image x:Name="GesturedImage" Source="dividbyzero.jpg" 
       HorizontalAlignment="Center" VerticalAlignment="Center" 
       Width="450" RenderTransformOrigin="0.5,0.5">
    <Image.RenderTransform>
        <ScaleTransform x:Name="ImageScaling" ScaleX="1" ScaleY="1" />
    </Image.RenderTransform>
    <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener PinchDelta="OnPinchDelta" />
  </toolkit:GestureService.GestureListener>
</Image>

А затем используйте DistanceRatio, чтобы получить значение для перевода:

private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
   ImageScaling.ScaleX = e.DistanceRatio;
   ImageScaling.ScaleY = e.DistanceRatio;
}
...