将WPF应用程序项目转换为UserControl库会导致InitializeComponent()无法找到错误

时间:2011-02-17 10:55:27

标签: c# wpf visual-studio-2010 .net-3.5 class-library

我正在开发一个用于创建大量用户控件的项目。后来我决定将这些控件移到UserControl库中。这就是我所做的:

  1. 创建了一个新的VS2010项目(用户控制库)。
  2. 将.NET版本设置为3.5
  3. 创建了一堆文件夹
  4. 将上一个项目中的文件添加到我的库中
  5. 但是,当我尝试构建我的库时,出现以下错误:

    Error   14  'EChart.Controls.EPreviewGraphSelector' does not contain a 
    definition for 'InitializeComponent' and no extension method 'InitializeComponent' 
    accepting a first argument of type 'EChart.Controls.EPreviewGraphSelector'
    could be found (are you missing a using directive or an assembly reference?)    
    C:\Projects\eControls\EChart\EChart\Controls\EPreviewGraphSelector.xaml.cs  73  18  EChart
    

    我的XAML文件的命名空间和后面的代码匹配。当它是一个应用程序而不是一个库时,整个项目正在建设中。

    以下是UserControl的简化代码:

    <UserControl x:Class="EChart.Controls.EPreviewGraphSelector">
    

    代码背后:

       namespace EChart.Controls
        {
            public partial class EPreviewGraphSelector : UserControl
            {
                public EPreviewGraphSelector()
                {
                    InitializeComponent();
                }
            }
        }
    
    • 没有为此用户控件生成g.cs文件!
    • 构建操作设置为页面。
    • 我添加了所有必要的参考资料
    • 用户控件构建工具设置为MSBuild:Compile

    修改

    我找到了无法编译的地方:

    如果我注释掉除构造函数之外的所有代码,则会生成用于我的usercontrol的g.cs文件,但是它会出现错误:

    错误2命名空间“Microsoft”中不存在类型或命名空间名称“Windows”(您是否缺少程序集引用?)C:\ Projects \ eControls \ EChart \ EChart \ _ obj \ Debug \ Controls \ EPreviewGraphSelector。 g.cs 15 17 EChart

    这来自g.cs

    的这一部分
    using Microsoft.Windows.Themes;
    

    任何想法为什么会发生这种情况?

3 个答案:

答案 0 :(得分:1)

其实我已经卖掉了这个问题,我不知道为什么会出现这个问题,但我知道很难解决它。

在我的UserControl中,我有以下参考:

xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna"

这可能是Blend在我设计一些标准控件时添加的。当我处于设计模式时,我没有收到任何错误消息。因此,当我编译我的userControl时,我得到g.cs文件,其中生成了我的InitializeComponent方法。然后我得到Microsoft.Windows.Themes;的引用,因为我在xaml中的引用(见上文)。当它编译g.cs文件时,它会失败,因此不会生成g.cs文件,也不会存在InitializeComponent方法,这会导致该错误。

答案 1 :(得分:0)

我猜你没有正确设置项目。我建议您查看WPF应用程序的设置,例如引用,并将它们复制到您的库中。用户控件的构建工具是否设置为MSBuild:Compile?

答案 2 :(得分:0)

您是否检查过已添加到新项目的现有文件的命名空间?我可以想象存在不一致或不同的命名空间,或者xaml中的命名空间与类定义中的命名空间不匹配。