我是WPF的新手,我正在尝试解决错误。我正在尝试构建一个自定义控件库,我可以在其中创建自己的控件对象。当我去File>新项目> WPF自定义控件库> [输入姓名]>保存,然后即时错误:
The name "CustomControl1" does not exist in the namespace "clr-namespace:ProjectName"
我没有编辑任何代码,但立即出错。作为参考,错误在Generic.xaml中。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProjectName">
<Style TargetType="{x:Type local:CustomControl1}"> //<--Fails here
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}"> // Fails here as well
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
我正在使用Visual Studio 12和.NET 4.有什么想法吗?
答案 0 :(得分:9)
这是一个IntelliSense错误,而不是构建错误,因此不应影响构建项目。要解决此错误,请
>
,然后将其添加回来)。打开文档时,XAML设计器会在后台加载以提供IntelliSense信息。它以异步方式加载未构建类型的信息(即,当前解决方案中定义但尚未构建到程序集中的类型),并且通常在设计者完成文档的初始解析后此过程完成。
构建项目将导致构建未构建的类型(从而解决问题),并对文档进行材质编辑将导致设计者使用新可用的类型信息重新分析文档(理想情况下,文档应该是当未构建的类型信息可用时重新解析。)
答案 1 :(得分:3)
根据James McNellis的回答,在我的情况下,我必须注释掉导致错误的XAML部分(因为错误不允许重建),然后关闭文件本身,所以它在VS中没有打开,然后我可以成功建立。然后我取消注释XAML部分,VS能够找到本地类... 如果有人会偶然发现这一点。 适用于Windows桌面的Visual Studio 2012 Express ... BR,
丹尼尔
答案 2 :(得分:1)
假设您的程序集名为 ProjectName ,而您的目标名称空间也称为 ProjectName
您必须更改以下内容:
xmlns:local="clr-namespace:ProjectName">
到
xmlns:local="clr-namespace:ProjectName;assembly=ProjectName">
答案 3 :(得分:1)
如果您没有在generic.xaml
中为CustomControl编写默认样式,也会发生这种情况。它在generic.xaml中生成类似的东西:
<Style TargetType="{x:Type local:MyCustomControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可以找到这段代码并更改或删除它。
答案 4 :(得分:0)
确保CustomControl1中没有任何错误并检查您的命名空间。
答案 5 :(得分:0)
重建和清理几次为我解决了这个问题。
答案 6 :(得分:0)
将derivedclass.cs中的派生类修改为Abstract:
public abstract class CustomControl : Control
然后在 .xaml 文件中使用它
<local:CustomControl>
...
</local:CustomControl>