2012-04-21 2 views
3

В приложении WPF, если ContentControl объявлен в XAML,«FindName» не работает, если элемент добавлен в коде

<Grid Name="MyGrid"> 
    <ContentControl Name="MyContentControl" /> 
</Grid> 

потом можно легко ссылаться на него в коде с помощью FindName:

ContentControl cc = FindName("MyContentControl") as ContentControl; 
cc.Content = ... 

Но если добавить ContentControl в коде вместо:

ContentControl contentcntr = new ContentControl(); 
contentcntr.Name = "MyContentControl"; 
this.MyGrid.Children.Add(contentcntr); 

FindName не находит его.

Что не так с этим во втором случае? Какая разница?

ответ

8

Парсер XAML автоматически регистрирует имена в обозревателе имен, если вы создаете такие элементы, вам может понадобиться сделать это самостоятельно, используя RegisterName. (Существует accessor on FrameworkElement.)