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。