我正在尝试构建一个ContentControl-derived 控件(我们称之为它MyContentControl),它将ControlTemplate由一个DataTemplateSelector-derived 类型的实例设置它(我们称之为它MyTemplateSelector)。
当我尝试这样做时:
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";
我希望,当我在这些控件上设置内容时,会为和 调用方法MyTemplateSelector的覆盖。DataTemplateSelector.SelectTemplate()contentControlmyContentControl
实际上,它只为 contentControl 调用。我需要做什么(为什么!)才能使它也起作用myContentControl?
(不确定它是否相关,但目前MyContentControl除了DependencyProperties覆盖DefaultStyleKeyProperty.
编辑(将其他帖子中的内容移至原始问题):
这是一个更详细的示例:
创建 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; // <== Place the breakpoint here } }添加
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)中提到的断点只被命中一次,for content="ABC"and contentControlelement。