12

我是 WPF 新手,我正在尝试解决错误。我正在尝试构建一个自定义控件库,我可以在其中制作自己的控件对象。当我转到文件 > 新项目 > 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。有什么想法吗?

4

7 回答 7

15

这是一个 IntelliSense 错误,而不是构建错误,因此它不应影响构建项目。要解决此错误,要么

  • 构建项目,或
  • 编辑文档(例如,通过>从标签中删除 a,然后将其添加回来)。

打开文档时,XAML 设计器会在后台加载以提供 IntelliSense 信息。它异步加载未构建类型的信息(即,在当前解决方案中定义但尚未构建到程序集中的类型),并且此过程通常在设计者完成文档的初始解析后完成。

构建项目将导致构建未构建的类型(从而解决问题),对文档进行材料编辑将导致设计人员使用新可用的类型信息重新解析文档(理想情况下,文档应该在未构建的类型信息可用)。

于 2012-09-24T17:09:10.423 回答
4

根据 James McNellis 的回答,在我的情况下,我必须注释掉导致错误的 XAML 部分(因为错误不允许重建),然后关闭文件本身,所以它不能在 VS 中打开,然后我可以成功构建。然后我取消了 XAML 部分的注释,VS 能够找到本地类......以防万一,有人会偶然发现这一点。适用于 Windows 桌面的 Visual Studio 2012 Express...BR,

丹尼尔

于 2015-08-03T10:15:23.370 回答
2

如果您没有在generic.xaml. 它在 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>

您可以找到这段代码并更改或删除它。

于 2014-05-03T10:40:14.140 回答
1

假设您的程序集称为ProjectName,并且您的目标命名空间也称为ProjectName

您必须更改以下内容:

xmlns:local="clr-namespace:ProjectName">

xmlns:local="clr-namespace:ProjectName;assembly=ProjectName">
于 2013-09-19T01:14:42.237 回答
0

确保 CustomControl1 没有任何错误并检查您的命名空间。

于 2012-09-24T17:10:17.957 回答
0

多次重建和清洁为我解决了这个问题。

于 2015-07-09T07:45:45.357 回答
0

将derivedclass.cs中的派生类修改为Abstract:

public abstract class CustomControl : Control

然后在 .xaml 文件中使用它

<local:CustomControl>
...
</local:CustomControl>

//另请参阅此主题:从 WPF 中的 UserControl 继承

于 2021-06-15T00:47:34.297 回答