2010-02-08 90 views
0

我添加控件編程方式在畫布這一切只是美好的...能力時,沒有屬性被設置

var newControlPoint = new ControlPoint() { Width = 10, Height = 10 }; 
newControlPoint.SetResourceReference(Control.TemplateProperty, "ControlPoint"); 
SetCanvasPosition(newControlPoint, position.X - (newControlPoint.Width/2), position.Y - (newControlPoint.Height/2)); 
canvas.Children.Add(newControlPoint); 
newControlPoint.UpdateLayout(); 

...但我來脫膠當我嘗試從第一行去除硬連線寬度和高度設置...

var newControlPoint = new ControlPoint(); 

...畫布定位似乎不生效和新創建的控制在{0,0}捲起。

任何想法?

回答

0

兩個問題:

  1. 寬度和高度的屬性不會被設置,因爲您沒有明確設置。它是您想要的ActualWidth和ActualHeight,由WPF設置。
  2. 控件尚未佈置,因此ActualWidth和ActualHeight將爲零。

要解決該問題,您可以:

  1. 使用數據綁定,而不是做一次性計算。
  2. 將定位邏輯附加到控件的Loaded事件,以便定位。
  3. 使用Dispatcher.BeginInvoke在佈局中以較低優先級運行的單獨消息中運行佈局邏輯,從而確保計算和分配ActualWidth和ActualHeight。
+0

就這樣,我實際上並不想在代碼背後設置寬度和高度。這是我的嘗試刪除這些代碼,發現了我的問題。 一旦我除去了高度和寬度的分割,一切都開始再次運作。 推測發生了一些異常,但Visual Studio並沒有絲毫表明任何錯誤(直到幷包括能夠通過並越過違規代碼)。 – lzcd 2010-02-08 09:45:40

+0

正如其他人指出的那樣,由於「高度」和「寬度」被設置爲NaN,所有奇怪的行爲都可以被解釋。例如x + NaN/y = NaN。 – lzcd 2010-02-08 09:54:29

相關問題