Silverlight 4:如何访问从codebehind创建的控件

Silverlight 4:如何访问从codebehind创建的控件,silverlight,silverlight-4.0,Silverlight,Silverlight 4.0,我试图创建一个方法来在两个用户控件之间画一条线(路径)。我发现有人发了一篇帖子,给了我一个关于如何做这件事的一般性指导,我成功地实现了代码,并开始根据我的需要修改它 我在访问用户控件时遇到问题: Button b2 = new Button(); var transform2 = b2.TransformToVisual(b2.Parent as UIElement); 工作正常,但我的按钮是通过一个方法动态创建的,所以我不能以“b2”的形式访问它们 我尝试了以下方法: var transfr

我试图创建一个方法来在两个用户控件之间画一条线(路径)。我发现有人发了一篇帖子,给了我一个关于如何做这件事的一般性指导,我成功地实现了代码,并开始根据我的需要修改它

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

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);
但是这样访问它会给我一个错误

如果你也尝试过:

                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);

有人能告诉我如何访问这些用户控件吗?

这行应该可以:-

var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as FrameworkElement);
正如您发现的那样,
UIElement
没有
Parent
,它是添加
Parent
属性的
FrameworkElement

但是,最好通过控件的名称访问该控件(我假设您正在为动态添加的控件分配一个
名称

这:-

var p1 = this.FindName(ps.ProcessID.ToString());
假设
用户控件
,并且在代码中为所讨论的框架元素指定了匹配名称,则应该工作:-

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

嗯,我没有看到您将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


谢谢你的回答,安东尼

Parent
“System.Windows.UIElement”不包含“Parent”的定义,并且找不到接受“System.Windows.UIElement”类型的第一个参数的扩展方法“Parent”(是否缺少using指令或程序集引用?)。使用第一个示例时,一切正常,但是我根据数据库数据创建了按钮控件,例如,我可能需要30个按钮。谢谢你的解释!我要尽快试试这个!这样做仍然不能让我访问.Parent,是的,我在添加控件时命名控件,顺便说一句,我们这里讨论的用户控件是一个Stackpanel,其中包含多个项。我想做的是在两个对象之间画一条线/路径,我有来自另一个问题的代码,但要使它起作用,我需要能够访问该行中的.Parent。