2010-07-28 33 views
0

我是新來的Silverlight編程,而DependencyProperty還是比較新的給我,這會導致以下問題:如何遵循一個元素的位置在Silverlight

我想連接到一個事件,當Canvas.LeftPropertyCanvas.TopProperty更改爲UIElement(在我的情況下爲UserControl)。

例如,我能夠做到以下幾點:

 source.SizeChanged += delegate 
      { 
       target.Width = source.Width; 
       target.Height = source.Height; 
      }; 

但是我無法找到位置的類似事件。這甚至有可能嗎?

回答

1

元素通常不知道它在WPF佈局系統中的位置。父元素(在你的情況下是一個Canvas)負責佈局元素,而元素只負責根據佈局容器的約束來調整自己的大小。

話雖如此,您可以使用元素上的LayoutUpdated事件。因爲LayoutUpdated事件(根據文檔)始終將空引用傳遞給sender參數,所以最好將其設置在面板上並將其用作重新掃描子項屬性的觸發器。

+0

我已經嘗試過LayoutUpdated。不幸的是,它只在最初的啓動時觸發一次。 當前的解決方法是更新源的位置,以更新目標。但是,這會對代碼引入不必要的依賴性。 – sukru 2010-07-28 04:04:54

+0

綁定怎麼樣? target.SetBinding(FrameworkElement.WidthProperty,new Binding(「Width」){Source = source}); – Josh 2010-07-28 04:29:54

+0

謝謝,這是朝着正確方向邁出的一步。但是Left和Top屬性實際上會涉及一些計算(基本+偏移量)。至少我正在學習更多關於這些屬性的知識(我仍然錯過了Windows.Forms的簡單性) – sukru 2010-07-28 16:42:45

相關問題