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

3

我正在尝试创建一种方法,在两个用户控件之间绘制一条线(路径)。我发现了某人发布的一篇帖子,给了我一个关于如何做到这一点的指针,我成功地实现了代码并开始适应我的需求。

我的问题在于访问用户控件:

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

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

Parent 出了什么错误? - ChrisF
'System.Windows.UIElement'不包含名为'Parent'的定义,并且找不到接受类型为'System.Windows.UIElement'的第一个参数的扩展方法'Parent'(是否缺少使用指令或程序集引用?) - Phillip
当我使用第一个示例时,一切都正常,但是如果我根据数据库数据创建按钮控件,例如我可能需要30个按钮。 - Phillip
2个回答

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

感谢Anthony提供的详细解答!我会尽快尝试这个方法! - Phillip
这样做仍然无法让我访问.Parent属性,是的,我在添加它们时命名了这些控件。顺便说一下,我们在这里谈论的用户控件是一个包含多个项目的Stackpanel。我想做的是在两个对象之间绘制一条线/路径,我已经从另一个问题得到了相应的代码,但为了使其工作,我需要能够访问.Parent属性。 - Phillip

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添加到变量中,那么我可以再次在控件上使用.Parent属性。
感谢您的回答,Anthony!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接