WPF獲取控件位置的方法


WPF中提供了多種布局方式,因此在布局中的定位相對於WinForm的絕對定位要靈活的多,在WPF中,控件均沒有如WinForm中的Location屬性,但是,對應的提供了各種設定與獲取相對於承載元素的定位

 

 

一般來說,Wpf中的布局控件大多都是相對定位(網格,流式,面板等),如果我們要改變控件在布局中的位置可以用Margin,Padding等類似HTML中的方式,雖然說這種方式在WinForm也可用,但是WPF中的布局方式與靈活性已經更接近與HTML了

 

 

WPF中也保留了相對傳統的布局方式,如在Canvas容器中可以用SetLeft(),SetTop()來絕對定位

 

關於控件定位詳細具體可參考 http://msdn.microsoft.com/zh-cn/library/ms751709.aspx

 

下來我們來簡單描述幾種獲取控件位置的方式,這也是很多新手容易糾結的地方


1.獲取鼠標在控件中的坐標

//在Mouse相關的事件中的方式    
   void item_MouseDown(object sender, MouseButtonEventArgs e)  
    {  
     Point point = e.GetPosition(canvas);   
   }   
   
   //或者Mouse的靜態方法GetPosition() 獲取與指定元素相對的鼠標位置=>等同於上面   
     Point point = Mouse.GetPosition(canvas); 

2.獲取控件相對於另一控件的坐標

//將相對於此元素的某個點轉換至相對於指定元素的坐標中  
void item_MouseDown(object sender, MouseButtonEventArgs e)  
 {  
      Rectangle rectangle =sender as Rectangle;   
    Point point = rectangle.TranslatePoint(new Point(),canvas);   
 } 

3.獲取控件在Window中的坐標

Window window =  Window.GetWindow(canvas);  
Point  point  =  canvas.TransformToAncestor(window).Transform(new Point(0, 0)); 


另外,c#中還提供了控件坐標與屏幕坐標之間的轉換,PointFromScreen,PointToScreen,這些就不再一一說明了

總之,根據實際情況選擇最適合的方式來獲取控件坐標或定位



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM