I'm trying to create a ContentControl-derived element (let it be called MyContentControl) that will have its own ControlTemplate, given an instance of the DataTemplateSelector-derived type (call it MyTemplateSelector).
When I try to do this:
ContentControl contentControl = new ContentControl();
contentControl.ContentTemplateSelector = new MyTemplateSelector();
contentControl.Content = "Some ContentControl Content";
MyContentControl myContentControl = new MyContentControl();
myContentControl.ContentTemplateSelector = new MyTemplateSelector();
myContentControl.Content = "Some MyControl Content";
I expect that when I set the content for these controls, it MyTemplateSelectoroverrides the method DataTemplateSelector.SelectTemplate()invoked for ContentControlboth and MyContentControl.
In fact, it is called only for contentControl. What do I need to do (and why!) So that it works for MyContentControltoo?
(Not sure if this is relevant, but currently MyContentControldoes nothing with DependencyProperties, except overriding metadata information for DefaultStyleKeyProperty.
EDIT ( ):
:
MyContentControl:
public class MyContentControl : ContentControl
{
static MyContentControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof (MyContentControl),
new FrameworkPropertyMetadata(typeof (MyContentControl)));
}
public MyContentControl() {}
}
MyTemplateSelector:
public class MyTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return null;
}
}
ContentControl MyContent ():
<StackPanel>
<local:MyContentControl x:Name="myContentControl" />
<ContentControl x:Name="contentControl" />
</StackPanel>
- InitializeComponent ( Loaded):
myContentControl.ContentTemplateSelector = new MyTemplateSelector();
myContentControl.Content = "123";
contentControl.ContentTemplateSelector = new MyTemplateSelector();
contentControl.Content = "ABC";
, (2), , content="ABC" ContentControl.