114

很长一段时间以来,我一直坚持使用 Windows 窗体开发(从 VB6 开始,一直持续到 C# .NET 4.5),而且我几乎已经达到了 Windows 窗体可以做的极限,两者都使用纯 .NET ,以及使用本机代码的特殊效果。

我曾尝试学习 WPF 和 XAML,但我被 WPF 的新设计师卡住了。与 Windows 窗体设计器相比,它确实似乎很难使用。

我想知道 .NET 的 WPF 设计器是否有更适合 Windows 窗体开发人员的替代方案?

4

5 回答 5

183

我喜欢写有关 WPF 初学者文章的博客,其中有一些特别可以帮助您:

总而言之,Winforms 和 WPF 之间最大的区别在于,在 WPF 中,您的数据层 (the DataContext) 是您的应用程序,而在 Winforms 中,您的 UI 层是您的应用程序。

换个角度来看,使用 WPF,您的应用程序由您创建的对象组成,您使用模板和其他 UI 对象来告诉 WPF 如何绘制您的应用程序组件。

这与 WinForms 相反,在 WinForms 中,您从 UI 对象构建应用程序,然后为它们提供所需的数据。

正因为如此,设计器实际上并没有太多使用,因为您的应用程序组件是用代码设计的,并且设计器只需要绘制一个反映您的数据类的用户友好界面(通常是ModelsViewModels

就个人而言,我更喜欢手动输入我的所有 XAML,因为它更快并且不会像拖放 WPF 设计器那样造成混乱,尽管我有时会使用设计器来预览我的 UI 的外观像。

因此,为了回答您是否有其他适合 WinForms 开发人员的 WPF 设计器的问题,我建议不要寻找其他设计器,而是学习如何以预期的方式使用 WPF。像 WinForms 一样使用 WPF 意味着您会错过很多让它如此出色的东西 :)

于 2013-03-28T14:32:58.377 回答
9

好吧,尽管有些人不同意,但我也建议不要使用 VS 设计器。至少不要创建接口。如果您可能想在不启动应用程序的情况下获得对实现的第一印象,那么它是一个很好的查看器,至少只要不使用像Styles和这样的复杂的东西Templates。但是,恕我直言,它的拖放结果应仅用作原型,因此在不再需要后将其丢弃。

以下是一些对我不使用它很重要的原因。

  1. VS 设计器正在使用修复边距和对齐方式(如果您正在使用布局控件,这通常不是必需的),这意味着如果需求发生更改,您必须触摸许多控件。如果您深入研究 XAML 和 WPF 机制,您可以创建一个应用程序,在外观方面可以轻松修改。

  2. 由于设计人员正在生成 xaml,因此组合不是最佳的,UI 可能表现不佳。我没量过,只是感觉。

一个更好的选择是MS Blend,虽然开始是一切,但很容易。它的拖放结果比 VS 设计器的结果要好得多。
但它是一个非常强大的工具,它可以帮助您使用非常强大的元素来创建最先进的 UI。我建议至少参观一个简短的研讨会,以了解它的机会。

回到你的问题,恕我直言,我想很多人都同意,给自己买一本好书,例如WPF Unleashed,然后,如果你想了解更多细节,WPF Pro。有很多与Winforms. 您不会通过使用任何设计师来了解它们。我认为这是最好的方法。

还请考虑到那里有许多框架和库(例如MVVM lightWPFToolkit),它们已经解决了一些常见问题。所以没有必要重新发明轮子。

于 2013-03-28T14:21:49.373 回答
9

我知道这是一个老问题,但为了其他人的利益,我想我应该稍微调整一下平衡 - 阅读其他一些答案,我觉得有些“不要使用设计师” '情绪来自没有正确使用它。 本教程非常适合帮助您学习并回答其他帖子中的一些批评。

例如,您可以通过右键单击并选择“重置布局”从类似于 Winforms 的基于边距的布局(这是您放置控件时的默认布局)切换到更 WPF 风格的样式

该视频涵盖了类似的领域。

我仍然更喜欢 VS2010 设计器——在拖放到 TabItems ** 时,VS2013 似乎有点错误(我当前的项目经常使用它)——但是 VS2013 文档大纲视图也可以让你在该视图中移动东西,这可能是一个真正的优势。

但是,实际上,要充分利用 WPF 和 xaml,您需要相当流利地使用设计器视图和 xaml 视图并在它们之间切换;如果你回避设计师,你就会错过一些对你有很大帮助的东西。

** 编辑 - 虽然这似乎在 VS 2013 的更新 3 和 VS14 的预览版中得到了改进,但迄今为止我仍然有时会出现奇怪的行为。

于 2014-01-31T23:54:44.207 回答
7

首先,在 Visual Studio deisgner 中的 WPF (XAML) 中,您应该始终使用 xaml 代码来构建您的 UI,而不是拖放您的控件!你需要保持你的代码干净。您可以使用 Expression Blend 来帮助您,它通过拖放更加面向图形,但它不是免费的。

这不是一个很大的学习曲线,但我认为您应该学习如何手动完成 xaml,而不是寻找替代方法。

于 2013-03-28T12:08:38.430 回答
7

我和你一样经历过这个过程。之后,我在公司 WPF 中教每个人。我学到了一些重要的经验教训,我认识的每个人都在使用 WPF。

  1. 如果您在后面的代码中使用 UI 控件,......那么您做错了。您绝对不需要在后面的代码中处理 UI 控件。
  2. 您不需要视觉开发人员来单击它。只处理 XAML 会提高工作效率。使用复制/粘贴。不要相信你的打字能力。它会省去很多麻烦。
  3. 将 XAML 视为一个查看数据的窗口。在您背后的代码中,您正在更改数据。在 XAML 中,您正在定义 UI 如何解释数据。
  4. 转换器很棒。一旦您获得关键数量的转换器,您的工作效率就会飞涨。他们将接管大量隐藏或调整大小的控制事件处理程序的角色,或者关于 UI 的任何事情,

它使 UI 开发变得有趣。尤其是当您发现它喜欢与 Asyc 进程一起使用时。它确实消除了许多由 Winforms 引起的头痛。

于 2015-01-18T12:37:48.917 回答