none
WPF 窗口 RRS feed

  • 问题

  • 现在在做一个不规则的窗口,窗口形状都出来,可是在触摸屏上就不能用手移动,请问如何解决,希望有相关代码,谢谢

    2012年3月7日 11:24

全部回复

  • 在触摸屏上是不能使用DragMove方法的,并且我们还需要限制窗口移动的范围。
    2012年3月7日 11:26
  • 及窗口移动时不能超过屏幕上下左右,谢谢
    2012年3月7日 11:27
  • 触摸是有专门的触摸事件的,http://msdn.microsoft.com/zh-cn/library/ms754010.aspx#touch_and_manipulation 你应该用TouchMove 事件,然后实时判断Touch的坐标位置。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月7日 15:43
    版主
  • BobBao你好,用你的方法测试UserControl是没有什么问题,但是如果用到WPF的窗口的时候就有问题了,窗口移动时位置总是乱跳,谢谢
    2012年3月8日 3:25
  • 你用 CaptureTouch 方法来捕获Touch 防止Touch到其他元素上。 我不确定你的不规则窗体是否已经去掉原先Windows的窗体外框,如果没有,你应该去掉:

     AllowsTransparency="True" WindowStyle="None"
    

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月8日 5:08
    版主
  • 你好,

    下面是一段代码,请指教:

    前台:

    <Window x:Class="Test.NoBorderWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="NoBorderWindow" Height="300" Width="300" TouchDown="Grid_TouchDown" TouchMove="Grid_TouchMove" TouchUp="Grid_TouchUp" AllowsTransparency="True" WindowStyle="None">
        <Grid Background="Yellow" >
           
        </Grid>
    </Window>

    后台:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;

    namespace Test
    {
        /// <summary>
        /// NoBorderWindow.xaml 的交互逻辑
        /// </summary>
        public partial class NoBorderWindow : Window
        {
            public NoBorderWindow()
            {
                InitializeComponent();
            }

            Point point = new Point();

            private void Grid_TouchDown(object sender, TouchEventArgs e)
            {
                point = e.GetTouchPoint(null).Position;
                this.CaptureTouch(e.TouchDevice);
            }

            private void Grid_TouchMove(object sender, TouchEventArgs e)
            {
                Vector v = e.GetTouchPoint(null).Position - point;
                Left += v.X;
                Top += v.Y;

                point = e.GetTouchPoint(null).Position;
            }

            private void Grid_TouchUp(object sender, TouchEventArgs e)
            {
                this.ReleaseTouchCapture(e.TouchDevice);
            }
        }
    }
    在移动窗口时,窗口位置定位不准,谢谢

    2012年3月8日 6:15
  •  e.GetTouchPoint() 的时候传入你要获得位置的相对元素。 然后你在移动时候最好屏幕上试着输出一下窗体坐标和手指坐标。 我这边没有触屏,不好测试。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月8日 9:58
    版主