C# 如何将ContentTemplateSelector与ContentControl一起正确使用?
我有很多ContentControl对象,我需要在其中一些对象(而不是所有对象)周围设置边框。我能够使用以下代码使其工作:C# 如何将ContentTemplateSelector与ContentControl一起正确使用?,c#,wpf,xaml,C#,Wpf,Xaml,我有很多ContentControl对象,我需要在其中一些对象(而不是所有对象)周围设置边框。我能够使用以下代码使其工作: 我想将整个ContentTemplate部分移动到另一个资源文件并合并它们。我添加了一个新的资源文件,并将下面的代码部分移到其中 当我尝试将实际的ContentControl代码更改为此时,我得到一个错误,即 “无法创建System.Windows.Controls.ControlTemplate类型的对象 应用于需要该类型的属性 System.Windows.Co
我想将整个ContentTemplate部分移动到另一个资源文件并合并它们。我添加了一个新的资源文件,并将下面的代码部分移到其中
当我尝试将实际的ContentControl代码更改为此时,我得到一个错误,即
“无法创建System.Windows.Controls.ControlTemplate类型的对象
应用于需要该类型的属性
System.Windows.Controls.DataTemplateSelector“
如何解决此错误
无法创建类型为ControlTemplate的对象
应用于需要该类型的属性
DataTemplateSelector
此错误消息非常明确。您正在将ControlTemplate
分配给ContentControl.DataTemplateSelector
。类型不匹配。您正在分配
到
解决方案:您需要实现自己的: 应用模板选择器:
<ContentControl ContentTemplateSelector="{StaticResource ContentControlDataTemplateSelector}" />
现在,您需要创建适当的资源来描述必须绑定到
ContentControl.Content
属性的数据的单个视觉外观。您似乎混淆了DataTemplates和ControlTemplates。ContentControl的ContentTemplate
属性保存一个DataTemplate,而ControlTemplate被分配给它的Template
属性。此外,正如错误消息明确指出的那样,ContentTemplateSelector
属性需要DataTemplateSelector。这是另一件事,即你必须编写的C#类。在这一点上,看看所有这些东西的在线文档似乎是个好主意:。好的,我明白了。但是我不能在DataTemplate中定义border元素。例如,对100个ContentControl元素中的20个应用边框的最佳方法是什么?这确实是我的问题的一个线索。问题+答案完全不同。“templateselector类型的对象不能应用于需要system.windows.datatemplate的属性”
<ContentControl ContentTemplateSelector="{StaticResource ContentControlDataTemplateSelector}" />