我正在尝试构建一个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()
contentControl
myContentControl
实际上,它只为 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 contentControl
element。