我有很多ContentControl对象,我需要在其中的几个周围设置一个边框,而不是全部。我能够让它使用下面的代码:
<ContentControl Margin="2" Grid.Row="0" Grid.Column="1" BorderThickness="5" BorderBrush="Beige">
<!-- ContentControl.Template to get the border -->
<ContentControl.Template>
<ControlTemplate TargetType="ContentControl">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" >
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}"
Margin="{TemplateBinding Padding}" />
</Border>
</ControlTemplate>
</ContentControl.Template>
<StackPanel>
<Label Content="Paid" HorizontalAlignment="Right" />
<Label Content="{Binding ReceivedAmount}" HorizontalAlignment="Right" />
</StackPanel>
</ContentControl>
我希望将整个ContentTemplate部分移动到其他资源文件中,并将它们合并。我添加了一个新的资源文件,并将下面的代码部分移到其中。
<ControlTemplate TargetType="ContentControl" x:Key="BalanceAmountControls">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" >
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Cursor="{TemplateBinding Cursor}"
Margin="{TemplateBinding Padding}" />
</Border>
</ControlTemplate>
当我试图将实际的ContentControl代码更改为以下代码时,我会看到一个错误:
“不能将System.Windows.Controls.ControlTemplate类型的对象应用于期望类型为System.Windows.Controls.DataTemplateSelector的属性”
<!-- Balance amount -->
<ContentControl Margin="2" Grid.Row="0" Grid.Column="2" BorderThickness="5" BorderBrush="Beige" ContentTemplateSelector="{StaticResource BalanceAmountControls}">
<!-- ContentControl.Template to get the border -->
<StackPanel>
<Label Content="Balance" HorizontalAlignment="Right" />
<Label Content="{Binding BalanceAmount}" HorizontalAlignment="Right" />
</StackPanel>
</ContentControl>
如何解决此错误?
发布于 2019-07-18 10:18:12
不能将ControlTemplate类型的对象应用于期望类型为DataTemplateSelector的属性。
此错误消息非常明确。您正在将一个ControlTemplate
分配给ContentControl.DataTemplateSelector
。类型错配。你在分配
<ControlTemplate TargetType="ContentControl" x:Key="BalanceAmountControls">
至
<ContentControl ContentTemplateSelector="{StaticResource BalanceAmountControls}">
。
解决方案:
您需要实现您自己的DataTemplateSelector
public class ContentControlDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Task)
{
if (// your condition)
return
element.FindResource("BalanceAmountControls") as DataTemplate;
else
return
element.FindResource("NonBalanceAmountControls") as DataTemplate;
}
return null;
}
}
应用模板选择器:
<ContentControl ContentTemplateSelector="{StaticResource ContentControlDataTemplateSelector}" />
现在,您需要创建适当的DataTemplate
资源,该资源描述必须绑定到ContentControl.Content
属性的数据的单个可视外观。
https://stackoverflow.com/questions/57090784
复制相似问题