c#编程数学测验过关小游戏(WPF)

c#编程数学测验过关小游戏(WPF),第1张

使用Visual Stuido 2013编写,.NET Framework 4.0环境。如果你的版本不匹配,新建一个C#的WPF项目,将窗体和代码文件替换进来即可。

这个取决于你的“更新”,是什么概念了。

WPF不同于WINFORM,前端的datagrid中的item其实就是ViewModel层的一个个数据,

因为你是在“更新”中,所以如果你选中的这个item在下次更新的时候没有了,(比如不存在了),那么你选中的行肯定是会被消掉的。这个也没有任何获取的意义, 硬要获取的话,建议你添加一个事件,SeletionChanged,即当你选择一行的时候,直接拿到这个item,然后处理去,就不再关注前端UI了。

如果你的数据是累加的,即每次更新后,上次的数据还在, 那么是可以保留选中的啊,

我写的测试程序如下, 前端的DataGrid名字叫 DataDg:

public delegate void SysBusyDelegate(bool isbusyt)//声明一个委托

public event SysBusyDelegate sysbusyEvent = null

private ObservableCollection<KeyValuePair<string, string>>_item = null

//声明了一个集合,集合就是最简单的键值对

public IList<KeyValuePair<string, string>>Items

{

get { return _item ?? (_item = new ObservableCollection<KeyValuePair<string, string>>())}

}

public MainWindow()

{

InitializeComponent()

DataDg.ItemsSource = Items

Binding();

}

void Binding()

{

var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>

{

for (int i = 0i <100i++)

{

Thread.Sleep(1000)

sysbusyEvent.Invoke(false)

}

})) { IsBackground = true }

thread.Start()

sysbusyEvent += (state) =>

{

Application.Current.Dispatcher.Invoke(new Action(() =>

{

if (state == false)

{

var gid = Guid.NewGuid().ToString()

Items.Add(new KeyValuePair<string, string>(gid, gid))

}

}))

}

}

//我通过后台线程 循环100次,每秒加一个新的项进入DATAGRID. 运行后的效果就是DataGrid一直在累加, 但是我选中的项一直都在, 不会消失或者失去焦点。

摘自《WPF揭秘》

下面是WPF的一些亮点:

‰1. 广泛整合——在WPF出现之前,Windows开发人员若需要在普通的2D图形和控件之外再

使用3D、视频、语音、富文档视图技术,就不得不学习一些独立技术,这些技术之间通

常存在许多不一致,而且是在没有多少内建支持的情况下组合运用它们。而WPF通过统

一的编程模型和紧密整合涵盖了所有这些部分,在紧密整合下,各种媒体类型都能组合

起来并一起呈现。你可以在不同媒体类型上应用一致的效果,你所学的某个领域中的许

多技术可以应用在任何其他领域。

2.与分辨率无关——想象这样一个世界,在这里切换到高分辨率设置时并不意味着什么东

西都变小了,而是让图形和文本的显示更清晰!试想,用户界面在轻巧的Ultra-Mobile PC

的屏幕上和在50英寸的电视机上都能很好地显示。WPF让这一切变得简单,允许你缩小

或者放大屏幕上的元素,却不需要考虑屏幕的分辨率,因为WPF使用矢量图形,使许多

这方面的需求变为可能。

硬件加速——虽然WPF是项新技术,但是它是基于Direct3D创建的。特别要注意的是,在

WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其

他Direct3D对象,并由硬件负责渲染。这意味着WPF应用程序与基于GDI的系统不同,它

们可以从硬件加速中获得好处,从而获得更平滑的图像和更好的性能

声明式编程——20多年来,Win16/Win32程序都用声明式资源脚本来定义对话框和菜单的布

局。虽然Windows Forms没有内建对声明式用户界面定义的支持,但所有类型的.NET程序

通常是利用声明式定制属性和基于XML的配置和资源文件。

富创作和定制(Rich composition and customization)——WPF控件具有你从没见过的创作

能力。你可以将一些动画按钮放入一个ComboBox控件中,或者将一些视频剪辑放入一个

菜单中!

何时我该使用WPF而不是Windows Forms ?(Windows Forms没有用了吗?)

WPF明显更适合于开发具有富媒体(rich media)的应用程序,但是有人曾说过:Windows

Forms是传统用户界面的商业应用程序的最佳选择。我认为这个说法是针对WPF测试版的,测

试版还缺少许多标准的控件(如TreeView、ListView和OpenFileDialog),也没有可视化的设

计器,这使得用WPF开发传统的Windows应用程序比用Windows Forms要难得多。

虽然Windows Forms有一些十分有用的控件(例如DataGridView和PropertyGrid)是WPF

所没有的,并且在我编写本书的时候,市场上Windows Forms有更多第三方控件,但WPF却有

一些即使对传统用户界面设计而言也是令人激动的特性(如支持分辨率无关性和高级布局)。

在第15章中,我将向你展示如何在一个WPF应用程序中使用Windows Forms控件。

因此,除非必须用Windows 98(Windows Forms 2.0仍然支持Windows 98但是WPF不支持),

否则我会建议你使用WPF而不是Windows Forms来开发大部分应用程序——特别是在Visual

Studio 2008发布以后。但是Windows Forms不会这么快就消失,在2005年2.0版本发布之后,不

会再对它做什么重大改进了。很明显,微软正在为WPF铺路(而不是Windows Forms),使它

成为未来的呈现平台

WPF应用程序也可以在Web浏览器内运行。它的优点在于有更好的开发工具和编程模型、

更加丰富的特性、健壮的控件重用性、广泛的编程语言支持,以及对于底层平台的完全访问(如

果安全机制允许的话)。但是查看这样的内容需要Windows系统和.NET Framework 3.0

(Windows Vista和之后的版本默认安装了.NET Framework 3.0)。

为了实现跨平台支持和到处运行,微软已经发布了Silver light。Silver light是一个小型的、

轻量级运行时环境,它是WPF的一个子集。除了支持C#和Visual Basic以外,它还支持XAML

和JavaScript,并且最终它将既可以在Windows系统也可以在非Windows系统中运行。在编写本

书的时候,WPF/E将考虑支持基于矢量的图形、图像、视频、动画、文本和基本控件,但是它

不支持3D、富文档(rich document)、可扩展性和硬件加速。就让我们拭目以待,看WPF或Silver light作为Flash的替代品将会流行到何种程度。

希望对你有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7980206.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存