在Windows Phone 8.1(运行时)中限制设备屏幕内的图像/控制拖动

时间:2015-05-28 07:12:20

标签: windows-phone-8 windows-phone windows-phone-8.1 win-universal-app

我正在开发Windows Phone 8.1应用程序。我有一个usercontrol,我有相同的控件注册manipdelta事件处理程序。 我控制的问题是

  1. 我拖动时超出了屏幕限制。

  2. 如果我对其设置了一些限制,那么它也会超过右边和下边的屏幕限制。

    double scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
    
    void control_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
            {
                //transform.TranslateX += e.Delta.Translation.X;
                //transform.TranslateY += e.Delta.Translation.Y;
    
                transform.TranslateX = limit(transform.TranslateX + e.Delta.Translation.X, 0, Window.Current.Bounds.Width * scaleFactor);
                transform.TranslateY = limit(transform.TranslateY + e.Delta.Translation.Y, 0, Window.Current.Bounds.Height * scaleFactor);
            }
    
    double limit(double value, double min, double max)
            {
                if (value > max) return max;
                else if (value < min) return min;
                else return value;
            }
    
  3. 我想仅限制设备屏幕内的控制拖动/操控。

1 个答案:

答案 0 :(得分:0)

您需要考虑控件的大小。换句话说,你必须从Window的宽度中减去控件的宽度,并从Window的高度中减去控件的高度。

顺便说一下,比例因子不是必需的,因为所有的测量都已经在&#34; Universal&#34;像素。

transform.TranslateX = limit(transform.TranslateX + e.Delta.Translation.X, 0, Window.Current.Bounds.Width - this.ActualWidth);
transform.TranslateY = limit(transform.TranslateY + e.Delta.Translation.Y, 0, Window.Current.Bounds.Height - this.ActualHeight);