簡體   English   中英

Silverlight 4:如何訪問從代碼隱藏創建的控制

[英]Silverlight 4: How to access control created from codebehind

我正在嘗試創建一種在兩個用戶控件之間繪制線條(路徑)的方法。 我發現有人發了一篇文章,給了我一個關於如何做到這一點的一般指示,我成功地實現了代碼並開始根據我的需要調整它。

我在訪問用戶控件時遇到問題:

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 在代碼中被賦予了匹配的名稱,則應該可以工作:-

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。

感謝您的回答安東尼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM