Silverlight 4:如何访问从后面的代码创建的控件

时间:2011-05-25 22:30:49

标签: silverlight silverlight-4.0

我正在尝试创建一个方法来在两个UserControl之间绘制一条线(路径)。我发现某人的帖子给了我关于如何执行此操作的一般指针,我成功地实现了代码并开始根据我的需要进行调整。

我在访问用户控件时遇到问题:

Button b2 = new Button();
var transform2 = b2.TransformToVisual(b2.Parent as UIElement);

按预期工作,但我的按钮是通过方法动态创建的,因此我无法将其作为“b2”访问。

我尝试了以下内容:

var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as UIElement);

但是像这样访问它会在.Parent上给我一个错误。

如果还尝试过:

                var p1 = this.FindName(ps.ProcessID.ToString());
                var p2 = this.FindName(ps.PreID.ToString());

                ////get geo data from both controls
                var transform1 = p1.TransformToVisual(p1.Parent as UIElement);
                var transform2 = p2.TransformToVisual(p2.Parent as UIElement);

有谁能告诉我如何访问这些UserControl?

2 个答案:

答案 0 :(得分:0)

这条线应该起作用: -

var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as FrameworkElement);

因为您发现UIElement没有Parent,而FrameworkElement添加了Parent属性。

然而,通过其名称访问控件会更好(我假设您正在为动态添加的控件分配Name)。

此: -

var p1 = this.FindName(ps.ProcessID.ToString());

应该假设thisUserControl并且有问题的FrameworkElement在代码中被赋予了匹配的名称: -

canvas1.Children.Add(new Button() {Name = ps.ProcessID.ToString(), Content="Hello"});

答案 1 :(得分:0)

嗯,我没有看到您将UIElement更改为FrameworkElement,此设置现在适用于我:

                var control1 = this.FindName(ps.ProcessID.ToString()) as FrameworkElement;
                var control2 = this.FindName(ps.PreID.ToString()) as FrameworkElement;
                var transform1 = control1.TransformToVisual(control1.Parent as UIElement);
                var transform2 = control2.TransformToVisual(control2.Parent as UIElement);

如果我将控件作为FrameworkElement添加到var中,那么我可以再次使用控件上的.Parent。

感谢你的回答安东尼!