我正在尝试创建一种方法来在两个用户控件之间绘制一条线(路径)。我发现某人的帖子为我提供了有关如何执行此操作的一般指示,我成功地实现了代码并开始根据我的需要对其进行调整。
我在访问用户控件时遇到问题:
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);
谁能告诉我如何访问这些用户控件?
最佳答案
这一行应该有效:-
var transfrom3 = canvas1.Children[0].TransformToVisual(canvas1.Children[0].Parent as FrameworkElement);
因为您已经发现 UIElement
没有 Parent
,它是添加了 Parent
属性的 FrameworkElement
.
不过,通过名称访问控件会更好(我假设您正在为动态添加的控件分配一个 Name
)。
这个:-
var p1 = this.FindName(ps.ProcessID.ToString());
假设 this
是 UserControl
并且相关的 FrameworkElement 在 code 中被赋予了匹配的名称,则应该可以工作:-
canvas1.Children.Add(new Button() {Name = ps.ProcessID.ToString(), Content="Hello"});
关于银光 4 : How to access control created from codebehind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131733/