如何从空项目中创建WPF应用程序?

时间:2013-12-09 17:08:07

标签: .net wpf winforms xaml

在编写WinForms应用程序时,我总是从一个空项目开始,然后添加一个Application Class,Forms等...这样做,我可以从头开始构建应用程序,保持它干净,没有所有的“绒毛” “标准WinForms项目,为您添加表格等等。

我想对WPF做同样的事情。我已经创建了我的应用程序类,创建了一个Window类,我可以正常运行该应用程序,但是没有与窗口关联的XAML,因为我只是将它声明为Window中的派生类。

我的问题是,可以将WPF -Windows添加到像WinForms -Forms这样的项目中,以便添加XAML并且设计器可以用于布局控件等......?或者我是否必须使用罐装“WPF项目”并从那里开始?

显然无法创建空项目并添加XAML支持的Windows。如果有人知道为什么,我会很感激解释。 (但是,您可以创建以编程方式生成的窗口,或者如果您希望在默认的WPF项目中使用自己的启动对象,只需删除App.xaml并使用静态Main()添加自己的类。)

class OrderEntry : System.Windows.Application
    {
        [STAThread]
        static void Main(string[] commandLine)
        {
            OrderEntry app = new OrderEntry();
            app.MainWindow = new WindowMain();
            app.MainWindow.Show();
            app.Run();
        }
    }

public partial class WindowMain : System.Windows.Window
{

}

工作正常,但WindowMain没有与之关联的XAML。

3 个答案:

答案 0 :(得分:2)

要回答您的问题,是的 - 基于XAML的窗口可以根据需要添加到项目中。

诀窍是确保您的项目类型是正确的,因为这会控制您在去Add->New...

时看到的模板项列表

如果您在解决方案资源管理器中找到了正确的项目,请右键单击并选择Unload Project,然后再次右键单击它并选择Edit,您将获得XML格式的proj文件。在其中,您将看到类似于以下内容的行:

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

这些GUID规定了您将在添加列表中看到的项目或文件模板。您可以在之前的问题Visual Studio project type guids中找到更多详细信息,并在其中一个答案INFO: List of known project type Guids

中找到关联的博文

答案 1 :(得分:2)

这是我试过的,它对我有用

  1. 从Visual Studio 2013模板创建一个空项目 enter image description here
  2. 为以下dll添加对程序文件(x86)\参考程序集\ Microsoft \ Framework.NETFramework \ v4.5 \的参考 enter image description here
  3. 通过文本编辑器修改位于项目根文件夹的.csproj文件。在<ProjectTypeGuids>节点中的<PropertyGroup>添加以下条目。

    {60dc8134-eba5-43b8-bcc9-bb4bc16c2548}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

  4. Read more about Project Type Guids here

    1. 更改<OutputType>WinExe</OutputType>

      <PropertyGroup>
      <ProjectGuid>{C60226AB-DDB6-49C2-8B0D-F59E6B590236}</ProjectGuid>
      <OutputType>WinExe</OutputType>
      <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
      

    2. 将App.Xaml文件添加到您的应用程序并替换其内容,如下

          

    3. 请注意 WpfApplication1 是默认命名空间,我们尚未创建 MainWindow.xaml

      1. 修改后面的代码并从Application继承它 enter image description here
      2. 修改.csproj以在<ApplicationDefinition>
      3. 下添加<ItemGroup>

        例如:

          <ItemGroup>
             <ApplicationDefinition Include="App.xaml">
              <Generator>MSBuild:Compile</Generator>
              <SubType>Designer</SubType>
            </ApplicationDefinition>
            <Page Include="MainWindow.xaml">
              <Generator>MSBuild:Compile</Generator>
              <SubType>Designer</SubType>
            </Page>
            <Compile Include="App.xaml.cs">
              <DependentUpon>App.xaml</DependentUpon>
              <SubType>Code</SubType>
            </Compile>
            <Compile Include="MainWindow.xaml.cs">
              <DependentUpon>MainWindow.xaml</DependentUpon>
              <SubType>Code</SubType>
            </Compile>
          </ItemGroup>
        

        注意MainWindow是我稍后添加的文件。

        现在我们可以创建XAML支持的窗口

答案 2 :(得分:1)

正如HighCore在评论中所说,使用给定的WPF FCL /模板是最好的,我也同意这一点。但是,如果你仍然需要自己的xaml那么就这样做

  
    

1)将Xml文件添加到View项目并保留其扩展名.xaml say WindowMain.xaml

         

2)从中删除以下行

  
<?xml version="1.0" encoding="utf-8" ?> 
  
    

3)复制并粘贴

  
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

</Window>
  
    

4)将x:class属性添加到Window元素中,并设置另一个属性,如标题高度宽度等

  
 <Window x:Class="Namespace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MyWindow" Height="350" Width="525">

</Window>
  
    

5)关闭项目并编辑项目文件,如

  
<Page Include="MainWindow.xaml">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
</Page>

<Compile Include="MyWindow.xaml.cs">
  <DependentUpon>MyWindow.xaml</DependentUpon>
  <SubType>Code</SubType>

//或MainWindow.cs       MainWindow.xaml       码    

  
    

6)保存并关闭

         

7)打开你的项目,你会在.xaml文件下找到你的.cs文件,就像我们在DependentUpon中提到的那样

         

8)将构造函数添加到您的分部类并调用InitializeComponent()方法

  
public MainWindow()
    {
        InitializeComponent();
    }

这对我有用。但这就是我们通过使用WPF窗口自行完成Wpf所提供的功能。我假设您的App类已经构建并正常工作,但我怀疑您在App Run之前调用了Window Show。我希望这会有所帮助。