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

3
我有一个类库,是使用“类库”项目模板创建的。如果我在解决方案资源管理器中右键单击此库并选择“添加>用户控件”,Visual Studio会添加一个WinForms UserControl,这不是我想要的——我想要“添加>用户控件”来添加一个WPF用户控件。
我已经添加了对WPF程序集(WindowsBase、PresentationFramework和PresentationCore)的引用,并且在这个库中已经有一些WPF UserControls,一切都可以编译。我的库没有引用WinForms程序集(System.Drawing和System.Windows.Forms)。但显然正确的引用并不能为Visual Studio提供足够的线索,因为当我尝试添加用户控件时,它会向我的项目添加WinForms引用,然后创建一个WinForms UserControl。
我可以将WPF用户控件添加到我的WPF应用程序项目中,然后将其移动到我的库中。但这很麻烦,我宁愿一开始就让它正常工作。
我认为我可能在我的.csproj文件中缺少某种奥秘的XML元素,告诉Visual Studio默认使用哪个设计器,如果我添加了正确的XML元素和正确的神秘GUID,它就会开始正常工作。如果我能创建一个新的WPF Control Library,我可能可以比较这两个项目文件并找出问题所在。然而,我正在使用Visual C# Express,它没有WPF Control Library项目模板,所以我就没戏了。
我需要在我的类库的.csproj文件中做什么,以便VS2010的“添加>新用户控件”将添加一个WPF UserControl?
1个回答

7
在项目文件中有子项目类别ID,会影响Visual Studio上下文菜单和项目的行为。最简单的方法是将项目重新创建为“WPF用户控件库”,而不是“类库”。如果您已经创建了项目,则可以通过手动打开“.csproj”文件并在文本编辑器(如Visual Studio本身)中编辑子项目类别ID来进行编辑,但这种方式很容易造成更多的损坏。我相信但还没有测试过,另一种类型的库也可以使用:WPF自定义控件库,它旨在容纳除UserControl对象以外的其他类型的控件,但作为WPF子项目类型,上下文菜单也适用于您所描述的用例。
编辑: 为了完整起见,我刚刚测试了如何手动添加子项目GUIDS。请将此行添加到.csproj文件中的第一个PropertyGroup中:
  <PropertyGroup>
    ...
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  </PropertyGroup>

未经Visual Studio Express测试。


正如我在问题中提到的那样,Visual C# Express没有“WPF自定义控件库”的项目模板。它也没有“WPF用户控件库”。 - Joe White

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