在编写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。
答案 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)
这是我试过的,它对我有用
通过文本编辑器修改位于项目根文件夹的.csproj文件。在<ProjectTypeGuids>
节点中的<PropertyGroup>
添加以下条目。
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Read more about Project Type Guids here
更改<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>
将App.Xaml文件添加到您的应用程序并替换其内容,如下
请注意 WpfApplication1 是默认命名空间,我们尚未创建 MainWindow.xaml
<ApplicationDefinition>
<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。我希望这会有所帮助。