银光 4 : How to access control created from codebehind

标签 silverlight silverlight-4.0

我正在尝试创建一种方法来在两个用户控件之间绘制一条线(路径)。我发现某人的帖子为我提供了有关如何执行此操作的一般指示,我成功地实现了代码并开始根据我的需要对其进行调整。

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

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

假设 thisUserControl 并且相关的 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/

相关文章:

c# - ListPicker 数据绑定(bind)和 INotifyPropertyChanged

wpf - 如何使 WPF 形状完全填充

javascript - 如何设置 Silverlight 浏览器应用程序和嵌入式 Web 浏览器控件之间的通信

Silverlight 4,子类化 WebClient

c# - 用户控件中的 INotifyPropertyChanged

c# - 拖动 WPF 用户控件

.net - 新的 Windows 应用程序 - 什么语言?

silverlight - 将 Silverlight UserControl 绑定(bind)到复杂对象

wcf - Silverlight 4 应用程序中的间歇性 Async_ExceptionOccurred 错误

silverlight-4.0 - WCF RIA 失败直到 "Clean Solution",然后它工作