【问题标题】:How to help move the image does not exceed the limit on screens如何帮助移动图像不超过屏幕限制
【发布时间】:2014-10-20 03:31:01
【问题描述】:

我可以将这些图片向右或向左、向上、向下拖动它经过一个屏幕。我已经放大和缩小了。我想对此进行限制。使用 Windows Phone 8.1 应用程序。 转换后,如果图像超出边界,则将其带回。您可以通过比较 TranslateX/TranslateY 的值和边界的宽度/高度来检测图像是否超出边界。边界是图片的父级(是Grid?),需要调试代码确定TranslateX和TranslateY的边界。

XAML

<Grid>
    <Grid Name="container">
        <Image Name="img_container" Source="/papers.co-mb00-baloon-fly-sea-wallpaper-1920x1080.jpg"
               ManipulationDelta="Image_ManipulationDelta"
               ManipulationMode="Scale,TranslateX,TranslateY"
               Stretch="Uniform"
                RenderTransformOrigin="0.5,0.5">
            <Image.RenderTransform>
                <CompositeTransform/>
            </Image.RenderTransform>
        </Image>
    </Grid>
</Grid>

C#

int mincale = 1;
private void Image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    Image img = sender as Image;
    CompositeTransform ct = img.RenderTransform as CompositeTransform;
    //zoom
    ct.ScaleX *= e.Delta.Scale;
    ct.ScaleY *= e.Delta.Scale;

    //checking

    if (ct.ScaleX < mincale)
        ct.ScaleX = mincale;
    if (ct.ScaleY < mincale)
        ct.ScaleY = mincale;

    //drag whitle zooming.

    ct.TranslateX += e.Delta.Translation.X;
    ct.TranslateY += e.Delta.Translation.Y;

    //checking drag not passed over a screen.that's fails.

    if (ct.TranslateX < 10 - img.ActualWidth * ct.ScaleX)
        ct.TranslateX = 10 - img.ActualWidth * ct.ScaleX;

    if (ct.TranslateX > container.ActualWidth - 10)
        ct.TranslateX = container.ActualWidth - 10;

    if (ct.TranslateY < 10 - img.ActualHeight * ct.ScaleY)
        ct.TranslateY = 10 - img.ActualHeight * ct.ScaleY;

    if (ct.TranslateY > container.ActualHeight - 10)
        ct.TranslateY = container.ActualHeight - 10;
}

【问题讨论】:

  • 限制拖动图片

标签: c# wpf xaml windows-phone-8 windows-phone-8.1


【解决方案1】:

您可以根据设置的图像高度和宽度检查那里的分辨率。

var scalfactor = App.Current.Host.Content.ScaleFactor;
switch (scalfactor)
            {
                case 150:
//write code for 720p or other screen Resolution

                  
                    break;
                case 160:
//write code for Wxga screen Resolution
          
                    break;
                case 100:
//write code for Wvga screen Resolution
              break;
                default:
                    throw new InvalidOperationException("Unknown resolution type");
            }

请参考此链接了解更多信息 http://msdn.microsoft.com/en-us/library/windows/apps/jj206974%28v=vs.105%29.aspx

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多