控件模板的TargetType与模板化类型不匹配。

4

我在WPF中创建了这个用户控件

<UserControl x:Class="WpfApp1.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:WpfApp1"
         DataContext="{Binding RelativeSource={RelativeSource Self}}">
<UserControl.Template>
    <ControlTemplate TargetType="{x:Type local:UserControl1}">
        <Grid x:Name="LayoutRoot" Background="White" Margin="7,7,7,0">
        </Grid>
    </ControlTemplate>
</UserControl.Template>

当我编译代码时,会出现以下错误:

“UserControl1”的 ControlTemplate TargetType 与模板类型“UserControl”不匹配。

但是,当我调试应用程序时,它可以正常工作。

这个错误是什么意思?如何解决它?


你为什么要使用ControlTemplate呢,直接将Grid声明为UserControl的内容不就可以了吗? - Clemens
这是一个简化的例子,在实际使用情况中,内容有多个控件。 - Sander Obdeijn
没有控件模板,内容将无法显示。对不起,我编辑太晚了,发了两次。 - Sander Obdeijn
2
你不能在编译之前对应用程序进行调试……而且你的标记应该没问题。 - mm8
我同意通常情况下你无法使用错误调试应用程序。但这个错误仍然允许你启动程序。这就是奇怪的地方。 - Sander Obdeijn
1个回答

5
很可能只在打开XAML编辑器时才会出现错误,对吧?这是因为这是一个XAML设计器问题,而不是WPF或.NET的问题。这就是为什么运行时它可以正常工作,但在Visual Studio中显示错误的原因。
我遇到了类似的问题,因为XAML设计器也不支持控件模板上的多态性(模板的TargetType="baseclass",但应用于派生类)-然而,在运行时也可以工作。
主要的解决方法是不使用XAML定义自定义控件。相反,创建一个模板化控件,其中模板由外部样式资源选择。有关更多信息,请参见http://mrbool.com/how-to-create-a-custom-control-in-xaml-and-c/26447

1
嘿,杰夫,我遇到了类似的问题,并看到了你的回复。你能详细说明一下外部源如何选择模板吗?谢谢,肖恩。 - Oyiwai
链接已经失效。 - gvdvenis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接