ElementName не работает при назначении DataTemplate из кода позади? - PullRequest
2 голосов
/ 09 июля 2010

Я пытаюсь получить доступ к элементу управления, используя ElementName из DataTemplate, который используется в другом UserControl (ресурсы), чем определено (в xaml).

Представьте себе такую ​​ситуацию:

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 ContentPresenter из MyUserControl.xaml:

что-то вроде:

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

Можно ли использовать ElementName из ресурсов, определенных вне UserControl?

Как DataTemplate ищет ElementName в том же UserControl? Может быть, возможно установить что-то вроде DataContext для самого DataTemplate, чтобы ElementName работал, не связываясь с DataContext, который отправляется элементам управления, используемым в Template?

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Необходимо ознакомиться с понятиями, связанными с Namescopes .

Вкратце, имена ограничиваются областью загрузки ресурсов Xaml.Например, каждый UserControl будет загружать свой собственный Xaml и, следовательно, иметь свою собственную область имен.В вашем случае вы просите MyUserControlWrapper найти имя, которое его LoadComponent не видел.

0 голосов
/ 27 июля 2010

Может быть, вы можете просто пройтись по VisualTree, используя RelativeSource и FindAncestor?Здесь представлена ​​хорошая презентация различных вариантов переплета: http://www.wpfwiki.com/Default.aspx?Page=WPF%20Q5.3&AspxAutoDetectCookieSupport=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...