2010-07-09 38 views
2

我想訪問控制使用ElementName從DataTemplate用於不同的UserControl(資源)比定義(在xaml中)。從後面的代碼分配DataTemplate時ElementName不起作用?

想象一下這樣的情況:

MyUserControl.xaml與資源下面的DataTemplate:

<UserControl.Resources> 
    <DataTemplate x:Key="SomeTemplate"> 
     <TextBlock Text="{Binding Text, ElementName=TextElement}"/> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid x:Name="LayoutRoot"> 
    <TextBlock x:Name="TextElement" Text="IT WORKS! (not...)"/> 
</Grid> 
</UserControl> 

MyUserControlWrapper.xaml

<ContentPresenter x:Name="ContentPresenter" Content="{Binding SomeContent}"/> 

,並在代碼MyUserControlWrapper.xaml的背後我設置的ContentTemplate來自MyUserControl.xaml的ContentPresenter:

類似:

ContentPresenter.ContentTemplate = (DataTemplate)childView.Resources["SomeTemplate"]; 

是否有可能使用的ElementName從被用戶控件之外定義的資源呢?

DataTemplate如何在同一個UserControl中搜索ElementName呢?也許有可能設置像DataContext爲DataTemplate本身爲ElementName工作,而不會與DataContext發送到模板內使用的控件發送?

+0

爲了幫助您得到一個解決方案倒不如是您展示「MyUserContolWrapper」如何放置。它目前還不清楚它與MyUserControl的關係。 – AnthonyWJones 2010-07-09 12:49:27

+0

我在後面的代碼中構建初始視圖,並將其放置在Wrapper的ContentPresenter中。包裝類的「提升」與像工具欄,側邊欄等一些功能的基本觀點 所以包裹觀點可能看起來像 [工具欄] [方] [查看原文] [信息幀] 而在原來的觀點,你可以使用模板控制包裝內容的某些部分。這是通過定義嚴格名稱DataTemplates完成的。設想像包裝器定義InfoFrame的設計(邊框,佈局等),但InfoFrame中的信息本身是從原始視圖的DataTemplate x:Key =「InfoContent」加載的。 – Kestutis 2010-07-09 13:00:11

回答

1

您需要查看與Namescopes相關的概念。

簡而言之,名稱的範圍是加載Xaml資源的位置。例如,每個UserControl都會加載自己的Xaml,因此擁有自己的名稱範圍。在你的情況下,你要求MyUserControlWrapper找到它的LoadComponent沒有看到的名稱。

+0

有沒有一種方法可以將任何控件的Namescope分配給代碼隱藏的DataTemplate? – Kestutis 2010-07-09 12:52:14