人人人人人人人人人人人人

UWP ManipulationStarted 移动图片或控件不要滑出父容器的判断

假设自定义一个用户控件用以在父容器Grid里拖动/移动:

 

<UserControl
    x:Class="App6.Pic"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App6"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"  ManipulationMode="All"
    ManipulationStarted="UserControl_ManipulationStarted" ManipulationDelta="UserControl_ManipulationDelta" 
    d:DesignHeight="300" RenderTransformOrigin="0.5,0.5"
    d:DesignWidth="400">
    <UserControl.RenderTransform>
        <TranslateTransform x:Name="t" />
    </UserControl.RenderTransform>
    <Grid Background="AliceBlue">
       <TextBlock Name="txt" Text="" />
    </Grid>
</UserControl>

  

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236

namespace App6
{
    public sealed partial class Pic : UserControl
    {
        public Pic()
        {
            this.InitializeComponent();
            
        }

        private void UserControl_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
        {
           

        }

        private void UserControl_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {

            this.t.X += e.Delta.Translation.X;
            this.t.Y += e.Delta.Translation.Y;
            txt.Text = "" + (Parent as Grid).ActualWidth + ",  " + t.X + this.Margin.Left +  this.ActualWidth / 2;
            //判断核设置移动范围限制在父容器内
            if ((Parent as Grid).ActualWidth < this.Margin.Left+ t.X + this.Width)//to right
            {
                this.t.X = (Parent as Grid).ActualWidth - (this.Margin.Left + this.Width);
            }

            if (0 >this.Margin.Left + t.X )//to left
            {
                this.t.X =  - this.Margin.Left ;
            }

            if (0 > this.Margin.Top + t.Y)//to top
            {
                this.t.Y= -this.Margin.Top;
            }

            if ((Parent as Grid).ActualHeight < this.Margin.Top + t.Y + this.Height)//to bottom
            {
                this.t.Y = (Parent as Grid).ActualHeight - (this.Margin.Top + this.Height);
            }


        }



    }
}

  

 

posted @ 2021-03-17 14:38  wgscd  阅读(25)  评论(0编辑  收藏  举报
test red font.