C# WPF应用程序是否需要使用XAML?

C# WPF应用程序是否需要使用XAML?,c#,wpf,winforms,xaml,C#,Wpf,Winforms,Xaml,我想学习C#,似乎每个人都在从使用WinForms转向使用WPF。对我来说,WPF应用程序似乎要复杂得多,因为使用了用于构建表单的.XAML文件 在我真正参与之前,我只是想问一下,XAML文件是构建WPF应用程序的唯一方法吗?有更简单的方法吗?我知道我可以学习使用WinForms,这似乎容易得多,因为你基本上有一个表单对象,你可以使用它来处理代码,但正如我提到的,我认为最好是构建WPF应用程序,如果你知道如何使用它,XAML确实会让事情变得更容易,因为它更具可读性和声明性,但你可以做到(差不多)

我想学习C#,似乎每个人都在从使用WinForms转向使用WPF。对我来说,WPF应用程序似乎要复杂得多,因为使用了用于构建表单的.XAML文件


在我真正参与之前,我只是想问一下,XAML文件是构建WPF应用程序的唯一方法吗?有更简单的方法吗?我知道我可以学习使用WinForms,这似乎容易得多,因为你基本上有一个表单对象,你可以使用它来处理代码,但正如我提到的,我认为最好是构建WPF应用程序,如果你知道如何使用它,XAML确实会让事情变得更容易,因为它更具可读性和声明性,但你可以做到(差不多)如果你喜欢的话,C代码中的任何东西都可以

e、 g

尽管可以更简洁、更层次地编写:

new Border
{
    BorderBrush = Brushes.Red,
    Child = new TextBlock
    {
        Text = "Lorem Ipsum"
    }
};
一般来说,我总是建议使用XAML,原因包括:

  • 解析器根据WPF的布局系统优化树结构
  • 不支持在代码中创建
    DataTemplates
    。使用
    FrameworkElementFactories
    的构造已被弃用,而支持使用
    XamlParser
    (我绝对不建议在代码中处理XAML字符串)
  • UI和代码之间的分离

XAML当然不是构建WPF应用程序的唯一方法。在运行了一些工具之后,XAML本身被翻译成C#/IL,用于实际构建UI。没有什么能阻止您编写完全相同的代码并手工构建WPF表单


我会提醒你考虑不要采用这种方法。XAML当然是构建WPF应用程序的首选工具。它将在绝大多数的Web样本中。手工编码WPF应用程序的样本少得多。

< P>。PF应用程序。这样做也有助于将您的视图从程序逻辑中分离出来。理想情况下,WPF开发团队将至少由一名程序员/设计师组成,可以说,他们负责事物的XAML(或视觉方面)。他们将制作动画和其他视觉元素。并且至少有一个“正常”负责编程逻辑和数据模型类型的开发人员。当然,这不是一个理想的世界。

不,你不必这样做,但@H.B.表示这会使它更容易


如果你像Visual Studio一样使用IDE,就像WinForms一样,你有一个designer plus表达式的混合。如果你一开始觉得XAML很强大,也许可以使用它而不是直接使用XAML。

是的,你可以编写纯WPF,但我不推荐它

Petzold的书引导你在使用XAML之前从代码中使用纯WPF。这本书是现成的二手书,你可以在网站上看到示例代码。这本书也是可用的,因此你可以通过试用帐户免费阅读几周。他的书是一次非常认真的尝试,在没有XAML的情况下教你WPF这种方式与许多其他书籍的XAML重量级方法形成了对比

VS2010中的可视化编辑器比上一个要好得多,因此您不必了解太多XAML来创建接口。我还建议尝试Expression Blend工具,看看您是否可以使用它的“设计器方法”来创建接口

WPF在您选择做事情的地方有很大的灵活性。我采用了一种更为以代码为中心的方法,使用XAML进行布局和样式设计,但在代码中绑定数据和命令。这使XAML的样式更简洁,避免了您必须学习如何在XAML中指定绑定的一些细微差别。为了简化学习过程,我建议从这个方法开始


我还建议您从使用MVVM模式开始,使用一个框架,例如它将为您提供大量的基础设施,并帮助您分离GUI和逻辑。

如果您喜欢WinForms,请使用它们。不要因为它很流行而切换,只有从中获得一些好处时才切换。如果您打算学习WPF,我建议您将MSDN作为资源。在和它链接到您的所有页面上,您可以找到您需要知道的最重要的事情。您如何说XAML转换为IL?它转换为BAML。您能确认吗?
var border = new Border();
border.BorderBrush = Brushes.Red;
var textBlock = new TextBlock();
textBlock.Text = "Lorem Ipsum";
// The following step is implicit in XAML via the structure
border.Child = textBlock;
new Border
{
    BorderBrush = Brushes.Red,
    Child = new TextBlock
    {
        Text = "Lorem Ipsum"
    }
};