WinForm和WPF控件的差异

WinForm和WPF控件的差异作为 Windows 桌面 UI 开发的两大 net 开发库 WinForm 和 WPF 同时存在着 之所以功能如此重合的两个库同时存在 是因为两者的底层差异非常大 WinForm 底层依赖于传统的 Win32API 特别是 User32 dll 而 WPF 则底层依赖于 Direct3D 而我们知道 User32 和 Direct3D 两者是平行存在 彼此独立的 WPF 之前几乎所有的 WindowsUI 开发都依赖于 User32 当

作为Windows桌面UI开发的两大.net开发库,WinForm和WPF同时存在着。之所以功能如此重合的两个库同时存在,是因为两者的底层差异非常大,WinForm底层依赖于传统的Win32API,特别是User32.dll;而WPF则底层依赖于Direct3D。 而我们知道User32和Direct3D两者是平行存在,彼此独立的。WPF之前几乎所有的WindowsUI开发都依赖于User32,当然游戏除外。随着Direct3D的日趋成熟和显卡的普通性能提升,微软力图改变这种状况,所以开发出了WPF来让一般的应用程序也使用Direct3D进行UI开发。当然,这一改变的影响是巨大的,传统的User32是以窗口为基础的,所有的控件都是一种特殊的窗口而已。而在Direct3D里,不再有窗口的存在。下面我们通过一个简单的实例来对比WinForm程序和WPF程序。

两者的UI看起来完全一样,都是有两个TextBox和一个Button组成。如下图所示。

WinForm和WPF控件的差异

 

WinForm和WPF控件的差异

启动Spy++,查找这两个程序的主窗口,见下面的红色区域。

WinForm和WPF控件的差异

 

可以很清楚的看出,WinForm程序中的每个控件都是一个窗口,而WPF程序中的控件不再是窗口。

由于WPF中的控件不再是窗口,所以和控件的通信就不能再使用窗口消息了,这将导致很大的开发差异,慢慢学习中…

尽管WinForm和WPF中的控件类名相同,但其实两者没有任何关联,各自定义在不同的命名空间中。

WinForm和WPF控件的差异

1、WPF事件中的sender

——WPF中所有事件响应方法第一个参数都是sender,代表触发事件的控件对象,是object类型,需要类型转换使用。

——应用:多个按钮的Click共享一个事件处理方法

 

2、集合List

——有时候不能预先确定长度或者需要动态修改内容和长度,这时候可以使用List

泛型集合。

——List

,可以看做是动态的数组。Add、Clear、Count、Remove、RemoveAt、ToArray(转换为数组)

——List

可以使用foreach遍历

 

3、控件通用属性:

——Visibility控件是否可见:枚举类型,Visible表示可见,Collapsed不可见。

——IsEnabled:控件是否可用,bool类型

——Background:背景色

——FontSize:字体大小

 

4、一些常用控件:

 

(2)读取password框中的内容要用*.password

 

(3)int? i = null; //类型后+?表示是可空的数据类型。

 

(4)image控件:source属性为图片路径,相对路径

 

 

(6)StackPanel 可扩展面板

 

(7)VerticalAlignment = “true” 使控件内容居中显示

 

 

(9)动态创建图片

 

 


                                           



           

       
   
    //DockPanel有优先级,谁先声明,谁先占空间

 

5、WPF中一些常用的属性设置

(2)让窗口初始占满屏幕:加:WindowState = “Maximized”

 

6、WPF中的ShowDialog方法与Show方法

 

InputWindow inputwin=new InputWindow();

bool? b=inputwin.ShowDialog();

 

——如果窗口是用ShowDialog方法打开的,那么新窗口中对DialogResult赋值会自动关闭新窗口,并且把DialogResult的值通过ShowDialog方法的返回值返回。

 

——ShowDialog()的返回值类型是bool?,而Show()的返回值类型是void,如在新窗口中没有对DialogResult属性进行赋值,直接关闭窗口,那么返回值为false。

 

——DialogResult是Window类定义的一个属性,类型为bool?

而在WinForm中的DialogResult是一个类,是MessageBox.Show()的返回值类型,而WPF中MessageBox.Show()的返回值类型为MessageBoxResult

 

 

 

 





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214325.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:31
下一篇 2026年3月18日 下午4:32


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号