• WPF布局(3)坐标(转)


    在动态定位布局时,经常需要获取控件或鼠标的相对位置,WPF提供了这样的函数可以我们使用。

    1、获取元素相对于父控件的位置
    使用Vector VisualTreeHelper.GetOffset(Visual visual)方法,返回visual在其父控件中的偏移量,然后你再将返回值的Vector对象转换成Point对象

    2、获取元素相对于祖宗控件或子孙控件的位置
    使用元素的 GeneralTransform TransformToAncetor(Visual ancetor)方法与GeneralTransform TransformToDescendent(Visual descendent),其返回元素相对于祖宗或子孙的GeneralTransform ,然后再使用Transform(new Point(0,0))方法得到的thePoint对象即可。

    3、获取任意两个元素见的相对位置
    如果元素是Visual,可以使用元素的GeneralTransform TransformToVisual(Visual visual)方法。

    如果元素是UIElement,可以使用元素的TranslatePoint(Point pt, UIElement relativeTo)方法来得到元素上的pt点相对于relativeTo时的值,将pt为(0,0)那么就可以得到元素上(0,0)点的相对位置

    4、获取鼠标相对于界面元素的位置

    使用Mouse.GetPosition(IInputElement relativeTo)或MouseEventArgs.GetPosition(IInputElement relativeTo)来获取鼠标相对于某一界面元素的相对位置

    5、获取鼠标相对于整个屏幕的位置

    第一种:采用System.Windows.Forms.Control类中的静态属性System.Windows.Forms.Control.MousePosition,需要因用这个命名空间。

    第二种:采用API函数:

    在VB的文档中可以找到一个API:Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long,我们可以在C#中使用它,代码如下:

    以下是引用片段:
      using System;
      using System.Collections.Generic;
      using System.Text;
      using System.Runtime.InteropServices;
      
      namespace Samples
      {
       class Win32
       {
       [StructLayout(LayoutKind.Sequential)]
       public struct POINT
       {
       public int X;
       public int Y;
      
       public POINT(int x, int y)
       {
       this.X = x;
       this.Y = y;
       }
       }
      
      
      
       [DllImport("user32.dll", CharSet = CharSet.Auto)]
       public static extern bool GetCursorPos(out POINT pt);
      
       }
      }

    参考:http://www.cnblogs.com/zhouyinhui/archive/2007/08/27/871523.html

    http://www.builder.com.cn/2007/1119/642354.shtml

  • 相关阅读:
    你会做夹具吗?(一)
    DDR3布线设计要点总结
    PCB设计要点-DDR3布局布线技巧及注意事项
    走进JEDEC,解读DDR(下)
    [转]关于STM32 PB3 PB4 如何设置成普通GPIO的配置
    [转]Verilog有符号数与无符号数作运算
    [转]实用光电二极管pd的采样电路
    STM32外部8M晶振不启动
    ALTCLKCTRL核的作用
    [转]如何在Altium Designer中将PCB生成PDF?
  • 原文地址:https://www.cnblogs.com/jyz/p/1286931.html
Copyright © 2020-2023  润新知