WPF如何得到乙個在使用者控制項內部的元素的座標位置

2021-09-19 22:00:02 字數 2211 閱讀 2914

原文:

wpf如何得到乙個在使用者控制項內部的元素的座標位置

例如有這樣乙個使用者控制項:

<

usercontrol

d:designheight

="100"

d:designwidth

="200"

...>

<

grid

>

<

grid.columndefinitions

>

<

columndefinition

width

="100"

/>

<

columndefinition

width

="100"

/>

grid.columndefinitions

>

<

ellipse

name

="leftellipse"

grid.column

="0"

width

="50"

height

="50"

horizontalalignment

="center"

verticalalignment

="center"

fill

="red"

/>

<

ellipse

name

="rightellipse"

grid.column

="1"

width

="50"

height

="50"

horizontalalignment

="center"

verticalalignment

="center"

fill

="green"

/>

grid

>

usercontrol

>

這是主視窗:

<

window

...>

<

canvas

name

="canvas1"

>

<

my:myusercontrol

x:name

="myusercontrol1"

width

="200"

height

="100"

canvas.top

="100"

canvas.left

="100"

/>

canvas

>

window

>

我們知道,可以通過下面的方法得到使用者控制項本身的座標位置:

double x = canvas.getleft(myusercontrol1);

那麼如何得到使用者控制項內部的元素的座標呢?要知道,當使用者控制項本身應用了變換(如:rotatetransform),其內部元素的座標是會改變的。

解決這個問題有兩個方法:

//方法1:

在使用者控制項中編寫方法:

public

generaltransform leftellipsetransform(uielement e)

在主視窗中呼叫:

var p = myusercontrol1.leftellipsetransform(canvas1).transform(new point());  //得到左圓的左上角座標

//方法2:

在使用者控制項中編寫方法:

public

point getleftellipseposition(point p, uielement e)

在主視窗中呼叫:

var p = myusercontrol1.getleftellipseposition(new point(), canvas1);  //得到左圓的左上角座標

或者,如果要得到左圓的圓心位置的話,就這樣呼叫:

var p = myusercontrol1.getleftellipseposition(new point(25, 25), canvas1);  //得到左圓的圓心座標

如何製作乙個使用者控制項?

vs竟然不提供直線和長方形這種常用的控制項,吐槽乙個!如何自作乙個呢,很簡單,其實控制項就像乙個windows,我們把windows看成乙個長方形,填充我們需要的顏色,不就是乙個長方形嗎,把長方形拉長拉細,不就是一條直線嗎?public partial class line usercontrol ...

如何得到乙個程序的控制代碼

1.獲取程序控制代碼。通過視窗可以獲得getwindowthreadprocessid 通過視窗控制代碼來獲得程序的id 然後通過程序的id 呼叫openprocess 函式來獲取程序控制代碼。openprocess 中必須制定操作許可權,如不制定沒有許可權就會失敗。從快照函式中獲取,createt...

如何判斷乙個點在矩形內

最近在做遊戲伺服器中技能模組,往往要掃瞄乙個區域,判斷npc是不是在我這個區域內,在的話就發傷害。就需要實現一下,對於乙個點是否在矩形內的判斷。只需要判斷該點是否在上下兩條邊和左右兩條邊之間就行,判斷乙個點是否在兩條線段之間夾著,就轉化成,判斷乙個點是否在某條線段的一邊上,就可以利用叉乘的方向性,來...