2014-09-30 73 views
1

Windows Phone 8應用程序我在數據模板中的透視控制中使用圖像,然後使用捏/縮放圖像但我的問題是如果我最小化圖像如此之小不縮放圖像..如何在數據模板中使用畫布。Windows Phone 8應用程序使用畫布圖像捏/放大數據模板


MY XAML

<phone:Pivot x:Name="pivot" ItemsSource="{Binding}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" > 
    <phone:Pivot.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Name="title" FontWeight="ExtraBold" Text="{Binding _textview}" HorizontalAlignment="Center" FontSize="30" Foreground="Orange"></TextBlock> 
     </DataTemplate> 
    </phone:Pivot.HeaderTemplate> 
    <phone:Pivot.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Image Margin="0,-30,0,80" Name="img" Stretch="Fill" Source="{Binding _images}" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache"> 
        <Image.RenderTransform> 
         <CompositeTransform x:Name="transform" /> 
        </Image.RenderTransform> 
        <toolkit:GestureService.GestureListener> 
         <toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" DoubleTap="GestureListener_DoubleTap" DragDelta="GestureListener_DragDelta" /> 
        </toolkit:GestureService.GestureListener> 
       </Image> 
      </Grid> 
     </DataTemplate> 
    </phone:Pivot.ItemTemplate> 
</phone:Pivot> 

MY CS

private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e) 
{ 
    var image = sender as Image; 
    var transform = image.RenderTransform as CompositeTransform; 
    angle = transform.Rotation; 
    scale = transform.ScaleX; 
} 

private void OnPinchDelta(object sender, PinchGestureEventArgs e) 
{ 
    var image = sender as Image; 
    var transform = image.RenderTransform as CompositeTransform; 
    transform.Rotation = angle + e.TotalAngleDelta; 
    transform.ScaleX = scale * e.DistanceRatio; 
    transform.ScaleY = scale * e.DistanceRatio; 
} 

private void GestureListener_DoubleTap(object sender, GestureEventArgs e) 
{ 
    var image = sender as Image; 
    var transform = image.RenderTransform as CompositeTransform; 
    transform.ScaleX = transform.ScaleY = 1; 
} 

private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e) 
{ 
    var image = sender as Image; 
    var transform = image.RenderTransform as CompositeTransform; 
    transform.TranslateX += e.HorizontalChange; 
    transform.TranslateY += e.VerticalChange; 
} 

回答

0

當你需要顯示在畫布上的圖像,

<Canvas> 
    <Image Margin="0,-30,0,80" Name="img" Stretch="Fill" Source="{Binding _images}" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache"> 
     <Image.RenderTransform> 
      <CompositeTransform x:Name="transform" /> 
     </Image.RenderTransform> 
    </Image> 
</Canvas> 

如需進一步參考,請參閱此處great official sample

0

您可以通過將縮放比例限制爲最小尺寸來防止縮小圖像。

// Don't shrink the image to less than 1/4 normal size. 
const double minScaleX = 0.25; 
const double minScaleY = 0.25; 

private void OnPinchDelta(object sender, PinchGestureEventArgs e) 
{ 
    var image = sender as Image; 
    var transform = image.RenderTransform as CompositeTransform; 
    transform.Rotation = angle + e.TotalAngleDelta; 
    transform.ScaleX = scale * e.DistanceRatio; 
    transform.ScaleY = scale * e.DistanceRatio; 

    if (transform.ScaleX < minScaleX) 
    { 
     transform.ScaleX = minScaleX; 
    } 
    if (transform.ScaleY < minScaleY) 
    { 
     transform.ScaleY = minScaleY; 
    } 
} 
相關問題