如何使Visual Studio 2010的“添加用户控件”创建WPF控件?

时间:2011-05-14 16:46:17

标签: wpf visual-studio user-controls visual-studio-express

我有一个使用“类库”项目模板创建的类库。如果我在解决方案资源管理器中右键单击此库并选择“添加>用户控件”,Visual Studio将添加一个WinForms UserControl。这不是我想要的 - 我想要“添加>用户控件”来添加WPF用户控件。

我已经添加了对WPF程序集(WindowsBase,PresentationFramework和PresentationCore)的引用,我已经在这个库中有一些WPF UserControl,并且所有内容都会编译。我的库没有对WinForms程序集的引用(System.Drawing和System.Windows.Forms)。但显然适当的引用并不足以成为Visual Studio的线索,因为当我尝试添加>用户控件,它将WinForms引用添加到我的项目,然后创建一个WinForms UserControl。

我可以将WPF用户控件添加到我的WPF应用程序项目中,然后将其移动到我的库中。但这是一种痛苦,我宁愿让它在一开始就正常运作。

我想我可能在我的.csproj文件中缺少某种神秘的XML元素,告诉Visual Studio默认使用哪个设计器,如果我添加了正确的XML元素和正确的神秘GUID,它将开始工作正常。如果我可以创建一个新的WPF控件库,我可能会比较这两个项目文件并想出来。但是,我使用的是Visual C#Express,它没有WPF控件库项目的模板,所以我在那里运气不好。

我需要对类库的.csproj文件做什么,以便VS2010添加>新用户控件将添加WPF UserControl?

1 个答案:

答案 0 :(得分:7)

项目文件中有子项目类ID,它们影响Visual Studio上下文菜单以及项目的行为方式。最简单的方法是将项目重新创建为:

  • WPF用户控件库

而不是“类库”。如果您已经通过在文本编辑器(如Visual Studio本身)中打开“.csproj”文件来手动创建要在子项目类ID中编辑的项目,但它很容易造成比您修复方式更多的损坏。

我相信但是没有测试另一种类型的库也可以工作:

  • WPF自定义控件库

用于保存除UserControl个对象之外的其他类型的控件,但作为WPF子项目类型,上下文菜单也适用于您正在描述的用例。

修改

为了完整起见,我刚刚测试了如何手动添加子项目GUIDS。将此行添加到.csproj文件中的第一个PropertyGroup

  <PropertyGroup>
    ...
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  </PropertyGroup>

未使用Visual Studio Express进行测试。