[英]How do I access the datacontext of a silverlight control in the codebehind
[英]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());
假設this
是UserControl
並且有問題的 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.