2011-11-14 37 views
34

我試圖訪問內容控件的控件模板內的用戶控件。具體來說:如何從代碼隱藏內訪問控件模板的元素

<ContentControl x:Name="MyList" > 
     <ContentControl.Template> 
      <ControlTemplate x:Name="MyControlTemplate"> 
       <Border RenderTransformOrigin="0,0" x:Name="border"> 
        <UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" /> 

我可以訪問this.MyList,但它說this.MyControlName未找到。在這種情況下,我如何從代碼隱藏中訪問MyControlName對象?

謝謝!

+0

我有一種感覺,你應該告訴你想要達到的目標,可能性是你不必去做你所要求的。 – flq

回答

62

你需要獲得模板和名稱的模板控制定位控制,是這樣的:

var template = MyList.Template; 
var myControl = (MyControl)template.FindName("MyControlName", MyList); 

模板只是:什麼是模板來創建,在控制摘要說明僅存在於正在模板化的內容中。

,你應該永遠只能訪問 控制模板內的元素,如果你在創作的控制,該模板是

注意。應該通過綁定屬性和方法來完成外部訪問。

對於數據模板這與此類似。你需要訪問的所有東西都應該綁定到一個對象上,然後訪問應該通過這個對象。在物品虛擬化的物品控制情況下尤其如此,所以這些元素大部分時間都不存在。

4

U也可以通過在控件中添加Loaded事件,然後在代碼中將事件的發件人分配給某個變量來從每個模板獲取控件。

+1

@Krythic,「這個簡單的答案」使得它......「這個答案並不比接受的答案簡單。除此之外,更簡單的answear更好,不會更糟:) –

+0

我的控制深埋在一系列風格和自定義模板中,這個事件拯救了我。謝謝。 – grinder22

相關問題