WPF和Windows窗体应用程序的显示差异

use*_*762 8 wpf winforms

实际上,我已经开始学习WPF了.我有几个月的开发Windows窗体应用程序的经验.虽然,我得到了WPF应用程序的含义,但我仍然无法根据它们的输出来区分两者之间的差异.

参考此链接:设备无关像素(DPI),我了解到,只要操作系统呈现WPF应用程序,它就会根据其分辨率自行管理其大小.

因此,为了检查这种差异,我在两个框架中创建了两个演示应用程序并更改了分辨率..但我没有发现任何令人满意的差异.这可以解释它是一个WPF应用程序,这个是一个Windows窗体应用程序.

它不会在最大化时创建任何滚动条,也不会在更改分辨率时使按钮变大或变小.

我在某处读过Visual Studio 2010已在WPF中重写过.但在我的实验中,我看到了(在更改桌面的分辨率时),它使文本和图形不可读/模糊.在重新调整窗口大小时,除菜单栏外,所有内容都被隐藏起来.菜单栏内容正在改变其定位,例如最右边的一个菜单项目正在向下移动.为什么?

请让我纠正并解释一点(这个显示问题).

Biz*_*han 14

为了正确回答这个问题,我应该写一整章,但我保持简短:

WPF应用程序和Windows窗体应用程序之间有三个主要区别:布局,渲染,演示


布局:

WPF布局系统在动态安排元素方面提供了更大的灵活性.它基于元素边界框(与WinForms中的精确像素相对)和测量排列机制(与UpdateLayoutWinForms 相对),可自动动态地找到每个元素的位置,而无需手动更新.

基本上,首先测量所有元素边界框,然后使用多种方法排列,例如Measure,MeasureCore,ArrangeCore,MeasureOverride等.

与WinForms不同,在WPF中,你拥有像素完美的大小,在WPF中,你有更多的选项和复杂性,例如Width,ActualWidthDesiredSize(甚至是LayoutTransform的变换).

这就是为什么

  • 当您键入WPF TextBox时,其宽度可能会增加并推动其他元素,甚至将某些元素推入新行(如您观察到的菜单栏)

  • 随着控件大小的变化,它会影响其他元素的可用空间.因此它们的大小和位置可能会相应改变.

  • 当窗口被重新调整大小或更改分辨率时,它会立即更新布局并更改元素的大小以填充或调整空间. 在这里,您将了解有关布局的更多信息.

  • Margin单独使用(不使用布局功能)来排列元素并不是WPF中的最佳选择.


渲染:

WPF使用double布局的数据类型(而不是像素完美的WinForms),因此有时您可能会看到边缘模糊,但可以避免使用SnapToDevicePixels=true.

WPF在利用GPU渲染GUI方面效率更高.在Windows窗体应用程序和WPF应用程序中尝试使用30x30 TextBox的网格.无论你编写WPF有多乱,它都不会闪烁,它仍然比Windows Forms运行得快得多.即使添加一些动画,视觉效果和样式也不会像Windows窗体那样损害您的性能.

备注:为避免Windows窗体应用程序中的速度降低和闪烁,应将窗体的DoubleBuffer设置为"true".

您可以使用任何Transform作为的RenderTransform轻松实现平滑变焦/旋转,或开发定制的基于GPU的着色效果,并在WPF等等.(我认为每个人都同意在WinForms中做这些事情是可行但真正的痛苦,如果不是出于挫折,你很可能会放弃并转移到GDI +DX,因为性能不佳.)


最后也是最重要的:

专注于演讲:

在开发WPF应用程序时,您必须停止在Windows窗体中思考:不再有UI事件,通过名称访问控件在代码隐藏中编写逻辑并开始在WPF中思考:绑定,命令,资源,样式,模板,转换器,DependencyProperties和他们的回调.

  • WPF的真正威力在于"视图"和"逻辑"的分离,这可以使用MVVM模式实现.

  • 它使视觉上最复杂的问题变得非常简单和易于开发,并且易于编写单元测试.

  • 一旦掌握了它,您就会意识到如何呈现数据或展示出令人敬畏的GUI外观是没有限制的.

如果您计划切换到WPF,那么您已做出了正确的决定.永远坚持MVVM,你会没事的!即避免代码隐藏(在.xaml.cs文件中编码),XAML名称(除非仅在XAML中使用)和UI事件尽可能多.


Mad*_*van 6

Windows窗体(WinForms)和Windows Presentation Foundation(WPF)是为应用程序构建用户界面的两种不同方法.Windows窗体是旧技术,其控件可在中找到System.Windows.Forms namespace.WPF是一种较新的技术,其控件位于System.Windows.Controls命名空间中.

WPF

优点:

  • 强大的造型和剥皮结构
  • 轻松创建自己的外观和感觉
  • 是否支持Windows窗体
  • 开发Windows Vista应用程序的未来技术
  • 重用现有代码的能力
  • 可以实现高度先进的数据绑定

缺点:

  • 声明性与程序性代码
  • 需要.NET Framework 3.0
  • 与Windows Forms相比,仍处于开发阶段
  • 需要兼容Dx9的视频卡才能获得高级图形

Windows窗体

优点:

  • 可在Internet上找到大量文档
  • 很多例子
  • 是否支持WPF

缺点:

  • 这需要多长时间?(我在某处读过微软现在正在开发WPF,只对Windows Forms进行维护).
  • 在应用程序中设计自己的外观和感觉是很多工作.