2010-07-28 37 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

相关问题