原文:
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:
在使用者控制項中編寫方法:
publicgeneraltransform leftellipsetransform(uielement e)
在主視窗中呼叫:
var p = myusercontrol1.leftellipsetransform(canvas1).transform(new point()); //得到左圓的左上角座標
//方法2:
在使用者控制項中編寫方法:
publicpoint 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是不是在我這個區域內,在的話就發傷害。就需要實現一下,對於乙個點是否在矩形內的判斷。只需要判斷該點是否在上下兩條邊和左右兩條邊之間就行,判斷乙個點是否在兩條線段之間夾著,就轉化成,判斷乙個點是否在某條線段的一邊上,就可以利用叉乘的方向性,來...