-
WPF UI界面必须在STA线程中才能进行创建,因此加载动画所在的线程要创建为STA线程;
-
在程序主界面加载完成后需要将其带到最上层显示,需要调用Win32 api来实现;
-
加载界面关闭也需要在其所在的线程关闭,因为需要调用其Dispatcher来关闭。
App.xaml.cs代码如下
public partial class App : Application
SplashWindow splash = null;
MainWindow window = null;
protected override void OnStartup(StartupEventArgs e)
base.OnStartup(e);
Thread thread = new Thread(() =>
splash = new SplashWindow();
splash.ShowDialog();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
window = new MainWindow();
MainWindow = window;
window.Show();
window.ContentRendered += (s, ev) =>
CloseSplash();
IntPtr handle = new WindowInteropHelper(MainWindow).Handle;
SetForegroundWindow(handle);
void CloseSplash()
splash.Dispatcher.Invoke(() =>
splash.Close();
});
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hnd);
代码中的SplashWindow 为加载动画窗口,这部分可以自己定义。
首先强调一点:异步更新UI实际上就是新开一个线程,执行耗时的任务,但是UI上的东西又不能被其他线程访问,所以非UI线程分析UI的那几条代码用一种特殊的方法来执行,从而实现既可以将耗时的操作放在其他线程,有可以更新UI。
1、方法一
案例:UI上有三个TextBlock,一个Button,当点击button的时候新三个task产生随机数(模拟耗时操作),然后将产生的随机数给UI显示
最近,在做一个WPF项目。项目中有一个需求,就是以列表的方式显示出项目图片。这些图片有的存在于互联网上,有的存在于本地磁盘。存在本地磁盘的文件好说,主要是存在于网络的图片。因为存在于网络的图片,在载入时需要耗费时间,如果直接给Image控件绑定URI属性的话,会造成界面卡顿。为了提供更好的体验,要求有类似网页中图片载入中的特效。 经过两天的研究,我翻看了爱壁纸HD For Window...
应一个朋友要求,写一个动画WPF Ui加载动画、后台多线程加载数据,委托修改Ui状态 的一个实例,分享给大家。
有什么问题可以直接加WPF/Silverlight 群 204882221
找晴天就可以。
乐意帮你们处理WPF 任何问题。
12.2.1 SolidColorBrush画刷 290
12.2.2 LinearGradientBrush画刷 290
12.2.3 RadialGradientBrush画刷 292
12.2.4 ImageBrush画刷 294
12.2.5 平铺的ImageBrush画刷 295
12.2.6 VisualBrush画刷 297
12.2.7 BitmapCacheBrush画刷 298
12.3 变换 299
12.3.1 变换形状 300
12.3.2 变换元素 302
12.4 透明 303
12.4.1 使元素半透明 303
12.4.2 透明掩码 304
12.5 小结 306
第13章 几何图形和图画 307
13.1 路径和几何图形 307
13.1.1 直线、矩形和椭圆图形 308
13.1.2 使用GeometryGroup
组合形状 309
13.1.3 使用CombinedGeometry融合
几何图形 311
13.1.4 使用PathGeometry绘制曲线和
直线 313
13.1.5 微语言几何图形 318
13.1.6 使用几何图形进行剪裁 319
13.2 图画 320
13.2.1 显示图画 322
13.2.2 导出插图 324
13.3 小结 326
第14章 效果和可视化对象 327
14.1 可视化对象 327
14.1.1 绘制可视化对象 328
14.1.2 在元素中封装可视化对象 329
14.1.3 命中测试 332
14.1.4 复杂的命中测试 334
14.2 效果 338
14.2.1 BlurEffect类 338
14.2.2 DropShadowEffect类 339
14.2.3 ShaderEffect类 340
14.3 WriteableBitmap类 342
14.3.1 生成位图 342
14.3.2 写入WriteableBitmap对象 343
14.3.3 更高效的像素写入 345
14.4 小结 347
第15章 动画基础 349
15.1 理解WPF动画 349
15.1.1 基于时间的动画 349
15.1.2 基于属性的动画 350
15.2 基本动画 351
15.2.1 Animation类 351
15.2.2 使用代码创建动画 353
15.2.3 同时发生的动画 358
15.2.4 动画的生命周期 358
15.2.5 Timeline类 359
15.3 故事板 362
15.3.1 故事板 363
15.3.2 事件触发器 363
15.3.3 重叠动画 366
15.3.4 同步的动画 367
15.3.5 控制播放 367
15.3.6 监视动画进度 371
15.4 动画缓动 373
15.4.1 使用缓动函数 373
15.4.2 在动画开始时应用缓动与在动画
结束时应用缓动 374
15.4.3 缓动函数类 375
15.4.4 创建自定义缓动函数 377
15.5 动画性能 379
15.5.1 期望的帧率 380
15.5.2 位图缓存 382
15.6 小结 384
第16章 高级动画 385
16.1 动画类型回顾 385
16.1.1 动态变换 386
16.1.2 动态改变画刷 390
16.1.3 动态改变像素着色器 392
16.2 关键帧动画 393
16.2.1 离散的关键帧动画 395
16.2.2 缓动关键帧 395
16.2.3 样条关键帧动画 396
16.3 基于路径的动画 397
16.4 基于帧的动画 399
16.5 使用代码创建故事板 402
16.5.1 创建主窗口 403
16.5.2 创建Bomb用户控件 405
16.5.3 投弹 406
16.5.4 拦截炸弹 409
16.5.5 统计炸弹和清理工作 410
16.6 小结 412
第Ⅳ部分 模板和自定义元素
第17章 控件模板 417
17.1 理解逻辑树和可视化树 417
17.2 理解模板 422
17.2.1 修饰类 424
17.2.2 剖析控件 426
17.3 创建控件模板 428
17.3.1 简单按钮 429
17.3.2 模板绑定 430
17.3.3 改变属性的触发器 431
17.3.4 使用动画的触发器 434
17.4 组织模板资源 435
17.4.1 分解按钮控件模板 436
17.4.2 通过样式应用模板 438
17.4.3 自动应用模板 439
17.4.4 由用户选择的皮肤 440
17.5 构建更复杂的模板 442
17.5.1 嵌套的模板 443
17.5.2 修改滚动条 445
17.5.3 控件模板示例 450
17.6 可视化状态 451
17.7 小结 452
第18章 自定义元素 453
18.1 理解WPF中的自定义元素 454
18.2 构建基本的用户控件 456
18.2.1 定义依赖项属性 456
18.2.2 定义路由事件 459
18.2.3 添加标记 460
18.2.4 使用控件 462
18.2.5 命令支持 462
18.2.6 深入分析用户控件 465
18.3 创建无外观控件 466
18.3.1 修改颜色拾取器的代码 466
18.3.2 修改颜色拾取器的标记 467
18.3.3 精简控件模板 469
18.4 支持可视化状态 472
18.4.1 开始编写FlipPanel类 473
18.4.2 选择部件和状态 475
18.4.3 默认控件模板 476
18.4.4 使用FlipPanel控件 482
18.4.5 使用不同的控件模板 483
18.5 创建自定义面板 485
18.5.1 两步布局过程 485
18.5.2 Canvas面板的副本 488
18.5.3 更好的WrapPanel面板 489
18.6 自定义绘图元素 492
18.6.1 OnRender( )方法 493
18.6.2 评估自定义绘图 494
18.6.3 自定义绘图元素 495
18.6.4 创建自定义装饰元素 497
18.7 小结 498
第Ⅴ部分 数据
第19章 数据绑定 501
19.1 使用自定义对象绑定到
数据库 501
19.1.1 构建数据访问组件 502
19.1.2 构建数据对象 504
19.1.3 显示绑定对象 505
19.1.4 更新数据库 508
19.1.5 更改通知 508
19.2 绑定到对象集合 510
19.2.1 显示和编辑集合项 510
19.2.2 插入和移除集合项 513
19.2.3 绑定到ADO.NET对象 514
19.2.4 绑定到LINQ表达式 515
19.3 提高大列表的性能 518
19.3.1 虚拟化 518
19.3.2 项容器再循环 519
19.3.3 缓存长度 519
19.3.4 延迟滚动 520
19.4 验证 521
19.4.1 在数据对象中进行验证 521
19.4.2 自定义验证规则 526
19.4.3 响应验证错误 528
19.4.4 获取错误列表 529
19.4.5 显示不同的错误指示符号 530
19.4.6 验证多个值 533
19.5 数据提供者 535
19.5.1 ObjectDataProvider 536
19.5.2 XmlDataProvider 539
19.6 小结 541
第20章 格式化绑定的数据 543
20.1 数据绑定回顾 543
20.2 数据转换 544
20.2.1 使用StringFormat属性 545
20.2.2 值转换器简介 546
20.2.3 使用值转换器设置字符串
的格式 547
20.2.4 使用值转换器创建对象 549
20.2.5 应用条件格式化 551
20.2.6 评估多个属性 552
20.3 列表控件 554
20.4 列表样式 555
20.4.1 ItemContainerStyle 556
20.4.2 包含复选框或单选按钮的ListBox
控件 557
20.4.3 交替条目样式 559
20.4.4 样式选择器 561
20.5 数据模板 564
20.5.1 分离和重用模板 566
20.5.2 使用更高级的模板 567
20.5.3 改变模板 569
20.5.4 模板选择器 570
20.5.5 模板与选择 573
20.5.6 改变项的布局 577
20.6 ComboBox控件 578
20.7 小结 581
第21章 数据视图 583
21.1 View对象 583
21.1.1 检索视图对象 584
21.1.2 视图导航 584
21.1.3 以声明方式创建视图 587
21.2 过滤、排序与分组 588
21.2.1 过滤集合 588
21.2.2 过滤DataTable对象 591
21.2.3 排序 592
21.2.4 分组 593
21.2.5 实时成型 598
21.3 小结 599
第22章 列表、树和网格 601
22.1 ListView控件 601
22.1.1 使用GirdView创建列 602
22.1.2 创建自定义视图 606
22.2 TreeView控件 613
22.2.1 创建数据绑定的TreeView
控件 614
22.2.2 将DataSet对象绑定到TreeView
控件 617
22.2.3 即时创建节点 618
22.3 DataGrid控件 621
22.3.1 改变列的尺寸与重新安排列 622
22.3.2 定义列 623
22.3.3 设置列的格式和样式 628
22.3.4 设置行的格式 629
22.3.5 显示行细节 630
22.3.6 冻结列 631
22.3.7 选择 632
22.3.8 排序 632
22.3.9 编辑 633
22.4 小结 635
第Ⅵ 窗口、页面和富控件
第23章 窗口 639
23.1 Window类 639
23.1.1 显示窗口 641
23.1.2 定位窗口 642
23.1.3 保存和还原窗口位置 642
23.2 窗口交互 644
23.2.1 窗口所有权 646
23.2.2 对话框模型 647
23.2.3 通用对话框 648
23.3 非矩形窗口 649
23.3.1 简单形状窗口 649
23.3.2 具有形状内容的透明窗口 651
23.3.3 移动形状窗口 653
23.3.4 改变形状窗口的尺寸 653
23.3.5 组合到一起:窗口的自定义控件
模板 655
23.4 Windows 7任务栏编程 658
23.4.1 使用跳转列表 659
23.4.2 改变任务栏图标和预览 663
23.5 小结 667
第24章 页面和导航 669
24.1 基于页面的导航 669
24.2 基于页面的界面 670
24.2.1 创建一个具有导航窗口的基于
页面的简单应用程序 670
24.2.2 Page类 672
24.2.3 超链接 673
24.2.4 在框架中驻留页面 675
24.2.5 在另一个页面中驻留页面 677
24.2.6 在Web浏览器中驻留页面 678
24.3 页面历史 678
24.3.1 深入分析WPF中的URI 678
24.3.2 导航历史 679
24.3.3 维护自定义的属性 681
24.4 导航服务 682
24.4.1 通过编程进行导航 682
24.4.2 导航事件 683
24.4.3 管理日志 684
24.4.4 向日志添加自定义项 685
24.4.5 使用页函数 689
24.5 XAML浏览器应用程序 692
24.5.1 创建XBAP应用程序 692
24.5.2 部署XBAP应用程序 693
24.5.3 更新XBAP应用程序 695
24.5.4 XBAP应用程序的安全性 695
24.5.5 完全信任的XBAP应用程序 696
24.5.6 组合XBAP/独立应用程序 697
24.5.7 为不同的安全级别编写代码 697
24.5.8 在网页中嵌入XBAP
应用程序 702
24.6 WebBrowser控件 702
24.6.1 导航到页面 703
24.6.2 构建DOM树 704
24.6.3 使用.NET代码为网页添加
脚本 706
24.7 小结 708
第25章 菜单、工具栏和功能区 709
25.1 菜单 709
25.1.1 Menu类 710
25.1.2 菜单项 710
25.1.3 ContextMenu类 712
25.1.4 菜单分隔条 713
25.2 工具栏和状态栏 714
25.2.1 ToolBar控件 714
25.2.2 StatusBar控件 717
25.3 功能区 718
25.3.1 添加功能区 719
25.3.2 应用程序菜单 720
25.3.3 选项卡、组与按钮 722
25.3.4 富工具提示 724
25.3.5 带有快捷键提示的键盘访问 725
25.3.6 改变功能区的大小 726
25.3.7 快速访问工具栏 729
25.4 小结 730
第26章 声音和视频 731
26.1 播放WAV音频 731
26.1.1 SoundPlayer类 731
26.1.2 SoundPlayerAction类 733
26.1.3 系统声音 733
26.2 MediaPlayer类 734
26.3 MediaElement类 735
26.3.1 使用代码播放音频 736
26.3.2 处理错误 737
26.3.3 使用触发器播放音频 737
26.3.4 播放多个声音 739
26.3.5 改变音量、平衡、速度以及
位置 740
26.3.6 将动画同步到音频 742
26.3.7 播放视频 744
26.3.8 视频效果 744
26.4 语音 747
26.4.1 语音合成 747
26.4.2 语音识别 749
26.5 小结 751
第27章 3D绘图 753
27.1 3D绘图基础 753
27.1.1 视口 754
27.1.2 3D对象 754
27.1.3 摄像机 761
27.2 深入研究3D绘图 765
27.2.1 着色和法线 766
27.2.2 更复杂的形状 769
27.2.3 Model3DGroup集合 769
27.2.4 使用材质 771
27.2.5 纹理映射 773
27.3 交互和动画 777
27.3.1 变换 777
27.3.2 旋转 778
27.3.3 飞过 779
27.3.4 跟踪球 781
27.3.5 命中测试 782
27.3.6 3D表面上的2D元素 786
27.4 小结 789
第Ⅶ部分 文档和打印
第28章 文档 793
28.1 理解文档 793
28.2 流文档 794
28.2.1 流内容元素 795
28.2.2 设置内容元素的格式 796
28.2.3 创建简单的流文档 797
28.2.4 块元素 799
28.2.5 内联元素 804
28.2.6 通过代码与元素进行交互 809
28.2.7 文本对齐 812
28.3 只读流文档容器 813
28.3.1 缩放 814
28.3.2 创建页面和列 815
28.3.3 从文件加载文档 817
28.3.4 打印 818
28.4 编辑流文档 818
28.4.1 加载文件 819
28.4.2 保存文件 821
28.4.3 设置所选文本的格式 822
28.4.4 获取单个单词 824
28.5 固定文档 825
28.6 批注 826
28.6.1 批注类 827
28.6.2 启用批注服务 828
28.6.3 创建批注 829
28.6.4 检查批注 832
28.6.5 响应批注更改 835
28.6.6 在固定文档中保存批注 835
28.6.7 自定义便签的外观 836
28.7 小结 837
第29章 打印 839
29.1 基本打印 839
29.1.1 打印元素 840
29.1.2 变换打印输出 842
29.1.3 打印不显示的元素 844
29.1.4 打印文档 845
29.1.5 在文档打印输出中控制页面 848
29.2 自定义打印 851
29.2.1 使用可视化层中的类
进行打印 851
29.2.2 自定义多页打印 854
29.3 打印设置和管理 859
29.3.1 保存打印设置 859
29.3.2 打印页面范围 859
29.3.3 管理打印队列 860
29.4 通过XPS进行打印 863
29.4.1 为打印预览创建XPS文档 863
29.4.2 写入内存的XPS文档 864
29.4.3 通过XPS直接打印到
打印机 865
29.4.4 异步打印 866
29.5 小结 866
第Ⅷ部分 其他主题
第30章 与Windows窗体进行交互 869
30.1 访问互操作性 869
30.2 混合窗口和窗体 870
30.2.1 为WPF应用程序添加窗体 870
30.2.2 为Windows窗体应用程序
添加WPF窗口 870
30.2.3 显示模态窗口和窗体 871
30.2.4 显示非模态窗口和窗体 871
30.2.5 启用Windows窗体控件的
可视化风格 872
30.3 创建具有混合内容的窗口 872
30.3.1 WPF和Windows窗体
“空域” 873
30.3.2 在WPF中驻留Windows
窗体控件 874
30.3.3 使用WPF和Windows窗体
用户控件 876
30.3.4 在Windows窗体中驻留WPF
控件 877
30.3.5 访问键、助记码和焦点 879
30.3.6 属性映射 880
30.4 小结 882
第31章 多线程 883
31.1 了解多线程模型 883
31.1.1 Dispatcher类 884
31.1.2 DispatcherObject类 884
31.2 BackgroundWorker类 887
31.2.1 简单的异步操作 887
31.2.2 创建BackgroundWorker
对象 888
31.2.3 运行BackgroundWorker
对象 889
31.2.4 跟踪进度 891
31.2.5 支持取消 893
31.3 小结 894
第32章 插件模型 895
32.1 在MAF和MEF两者间
进行选择 895
32.2 了解插件管道 896
32.2.1 管道的工作原理 897
32.2.2 插件文件夹结构 898
32.2.3 为使用插件模型准备
解决方案 899
32.3 创建使用插件模型的
应用程序 900
32.3.1 协定 901
32.3.2 插件视图 901
32.3.3 插件 902
32.3.4 插件适配器 902
32.3.5 宿主视图 903
32.3.6 宿主适配器 904
32.3.7 宿主 904
32.3.8 更多插件 907
32.4 与宿主进行交互 908
32.5 可视化插件 912
32.6 小结 915
第33章 ClickOnce部署 917
33.1 理解应用程序部署 917
33.1.1 ClickOnce安装模型 918
33.1.2 ClickOnce部署的局限性 919
33.2 简单的ClickOnce发布 920
33.2.1 设置发布者和产品 920
33.2.2 启动发布向导 922
33.2.3 理解部署文件的结构 926
33.2.4 安装ClickOnce应用程序 926
33.2.5 更新ClickOnce应用程序 928
33.3 ClickOnce附加选项 928
33.3.1 发布版本 928
33.3.2 更新 929
33.3.3 文件关联 930
33.3.4 发布选项 931
33.4 小结 932
privatevoidWindow_Loaded(objectsender,RoutedEventArgse){
varLoads=this.Dispatcher.BeginInvoke(newAction(()=>{
//这里执行其它耗时操作
Loads.Completed+=newEventHandler(Loads_Completed);
voidLoads_Completed(objectse...
<Window x:Class="显示时间.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/p...
12.2.1 SolidColorBrush画刷 290
12.2.2 LinearGradientBrush画刷 290
12.2.3 RadialGradientBrush画刷 292
12.2.4 ImageBrush画刷 294
12.2.5 平铺的ImageBrush画刷 295
12.2.6 VisualBrush画刷 297
12.2.7 BitmapCacheBrush画刷 298
12.3 变换 299
12.3.1 变换形状 300
12.3.2 变换元素 302
12.4 透明 303
12.4.1 使元素半透明 303
12.4.2 透明掩码 304
12.5 小结 306
第13章 几何图形和图画 307
13.1 路径和几何图形 307
13.1.1 直线、矩形和椭圆图形 308
13.1.2 使用GeometryGroup
组合形状 309
13.1.3 使用CombinedGeometry融合
几何图形 311
13.1.4 使用PathGeometry绘制曲线和
直线 313
13.1.5 微语言几何图形 318
13.1.6 使用几何图形进行剪裁 319
13.2 图画 320
13.2.1 显示图画 322
13.2.2 导出插图 324
13.3 小结 326
第14章 效果和可视化对象 327
14.1 可视化对象 327
14.1.1 绘制可视化对象 328
14.1.2 在元素中封装可视化对象 329
14.1.3 命中测试 332
14.1.4 复杂的命中测试 334
14.2 效果 338
14.2.1 BlurEffect类 338
14.2.2 DropShadowEffect类 339
14.2.3 ShaderEffect类 340
14.3 WriteableBitmap类 342
14.3.1 生成位图 342
14.3.2 写入WriteableBitmap对象 343
14.3.3 更高效的像素写入 345
14.4 小结 347
第15章 动画基础 349
15.1 理解WPF动画 349
15.1.1 基于时间的动画 349
15.1.2 基于属性的动画 350
15.2 基本动画 351
15.2.1 Animation类 351
15.2.2 使用代码创建动画 353
15.2.3 同时发生的动画 358
15.2.4 动画的生命周期 358
15.2.5 Timeline类 359
15.3 故事板 362
15.3.1 故事板 363
15.3.2 事件触发器 363
15.3.3 重叠动画 366
15.3.4 同步的动画 367
15.3.5 控制播放 367
15.3.6 监视动画进度 371
15.4 动画缓动 373
15.4.1 使用缓动函数 373
15.4.2 在动画开始时应用缓动与在动画
结束时应用缓动 374
15.4.3 缓动函数类 375
15.4.4 创建自定义缓动函数 377
15.5 动画性能 379
15.5.1 期望的帧率 380
15.5.2 位图缓存 382
15.6 小结 384
第16章 高级动画 385
16.1 动画类型回顾 385
16.1.1 动态变换 386
16.1.2 动态改变画刷 390
16.1.3 动态改变像素着色器 392
16.2 关键帧动画 393
16.2.1 离散的关键帧动画 395
16.2.2 缓动关键帧 395
16.2.3 样条关键帧动画 396
16.3 基于路径的动画 397
16.4 基于帧的动画 399
16.5 使用代码创建故事板 402
16.5.1 创建主窗口 403
16.5.2 创建Bomb用户控件 405
16.5.3 投弹 406
16.5.4 拦截炸弹 409
16.5.5 统计炸弹和清理工作 410
16.6 小结 412
第Ⅳ部分 模板和自定义元素
第17章 控件模板 417
17.1 理解逻辑树和可视化树 417
17.2 理解模板 422
17.2.1 修饰类 424
17.2.2 剖析控件 426
17.3 创建控件模板 428
17.3.1 简单按钮 429
17.3.2 模板绑定 430
17.3.3 改变属性的触发器 431
17.3.4 使用动画的触发器 434
17.4 组织模板资源 435
17.4.1 分解按钮控件模板 436
17.4.2 通过样式应用模板 438
17.4.3 自动应用模板 439
17.4.4 由用户选择的皮肤 440
17.5 构建更复杂的模板 442
17.5.1 嵌套的模板 443
17.5.2 修改滚动条 445
17.5.3 控件模板示例 450
17.6 可视化状态 451
17.7 小结 452
第18章 自定义元素 453
18.1 理解WPF中的自定义元素 454
18.2 构建基本的用户控件 456
18.2.1 定义依赖项属性 456
18.2.2 定义路由事件 459
18.2.3 添加标记 460
18.2.4 使用控件 462
18.2.5 命令支持 462
18.2.6 深入分析用户控件 465
18.3 创建无外观控件 466
18.3.1 修改颜色拾取器的代码 466
18.3.2 修改颜色拾取器的标记 467
18.3.3 精简控件模板 469
18.4 支持可视化状态 472
18.4.1 开始编写FlipPanel类 473
18.4.2 选择部件和状态 475
18.4.3 默认控件模板 476
18.4.4 使用FlipPanel控件 482
18.4.5 使用不同的控件模板 483
18.5 创建自定义面板 485
18.5.1 两步布局过程 485
18.5.2 Canvas面板的副本 488
18.5.3 更好的WrapPanel面板 489
18.6 自定义绘图元素 492
18.6.1 OnRender( )方法 493
18.6.2 评估自定义绘图 494
18.6.3 自定义绘图元素 495
18.6.4 创建自定义装饰元素 497
18.7 小结 498
第Ⅴ部分 数据
第19章 数据绑定 501
19.1 使用自定义对象绑定到
数据库 501
19.1.1 构建数据访问组件 502
19.1.2 构建数据对象 504
19.1.3 显示绑定对象 505
19.1.4 更新数据库 508
19.1.5 更改通知 508
19.2 绑定到对象集合 510
19.2.1 显示和编辑集合项 510
19.2.2 插入和移除集合项 513
19.2.3 绑定到ADO.NET对象 514
19.2.4 绑定到LINQ表达式 515
19.3 提高大列表的性能 518
19.3.1 虚拟化 518
19.3.2 项容器再循环 519
19.3.3 缓存长度 519
19.3.4 延迟滚动 520
19.4 验证 521
19.4.1 在数据对象中进行验证 521
19.4.2 自定义验证规则 526
19.4.3 响应验证错误 528
19.4.4 获取错误列表 529
19.4.5 显示不同的错误指示符号 530
19.4.6 验证多个值 533
19.5 数据提供者 535
19.5.1 ObjectDataProvider 536
19.5.2 XmlDataProvider 539
19.6 小结 541
第20章 格式化绑定的数据 543
20.1 数据绑定回顾 543
20.2 数据转换 544
20.2.1 使用StringFormat属性 545
20.2.2 值转换器简介 546
20.2.3 使用值转换器设置字符串
的格式 547
20.2.4 使用值转换器创建对象 549
20.2.5 应用条件格式化 551
20.2.6 评估多个属性 552
20.3 列表控件 554
20.4 列表样式 555
20.4.1 ItemContainerStyle 556
20.4.2 包含复选框或单选按钮的ListBox
控件 557
20.4.3 交替条目样式 559
20.4.4 样式选择器 561
20.5 数据模板 564
20.5.1 分离和重用模板 566
20.5.2 使用更高级的模板 567
20.5.3 改变模板 569
20.5.4 模板选择器 570
20.5.5 模板与选择 573
20.5.6 改变项的布局 577
20.6 ComboBox控件 578
20.7 小结 581
第21章 数据视图 583
21.1 View对象 583
21.1.1 检索视图对象 584
21.1.2 视图导航 584
21.1.3 以声明方式创建视图 587
21.2 过滤、排序与分组 588
21.2.1 过滤集合 588
21.2.2 过滤DataTable对象 591
21.2.3 排序 592
21.2.4 分组 593
21.2.5 实时成型 598
21.3 小结 599
第22章 列表、树和网格 601
22.1 ListView控件 601
22.1.1 使用GirdView创建列 602
22.1.2 创建自定义视图 606
22.2 TreeView控件 613
22.2.1 创建数据绑定的TreeView
控件 614
22.2.2 将DataSet对象绑定到TreeView
控件 617
22.2.3 即时创建节点 618
22.3 DataGrid控件 621
22.3.1 改变列的尺寸与重新安排列 622
22.3.2 定义列 623
22.3.3 设置列的格式和样式 628
22.3.4 设置行的格式 629
22.3.5 显示行细节 630
22.3.6 冻结列 631
22.3.7 选择 632
22.3.8 排序 632
22.3.9 编辑 633
22.4 小结 635
第Ⅵ 窗口、页面和富控件
第23章 窗口 639
23.1 Window类 639
23.1.1 显示窗口 641
23.1.2 定位窗口 642
23.1.3 保存和还原窗口位置 642
23.2 窗口交互 644
23.2.1 窗口所有权 646
23.2.2 对话框模型 647
23.2.3 通用对话框 648
23.3 非矩形窗口 649
23.3.1 简单形状窗口 649
23.3.2 具有形状内容的透明窗口 651
23.3.3 移动形状窗口 653
23.3.4 改变形状窗口的尺寸 653
23.3.5 组合到一起:窗口的自定义控件
模板 655
23.4 Windows 7任务栏编程 658
23.4.1 使用跳转列表 659
23.4.2 改变任务栏图标和预览 663
23.5 小结 667
第24章 页面和导航 669
24.1 基于页面的导航 669
24.2 基于页面的界面 670
24.2.1 创建一个具有导航窗口的基于
页面的简单应用程序 670
24.2.2 Page类 672
24.2.3 超链接 673
24.2.4 在框架中驻留页面 675
24.2.5 在另一个页面中驻留页面 677
24.2.6 在Web浏览器中驻留页面 678
24.3 页面历史 678
24.3.1 深入分析WPF中的URI 678
24.3.2 导航历史 679
24.3.3 维护自定义的属性 681
24.4 导航服务 682
24.4.1 通过编程进行导航 682
24.4.2 导航事件 683
24.4.3 管理日志 684
24.4.4 向日志添加自定义项 685
24.4.5 使用页函数 689
24.5 XAML浏览器应用程序 692
24.5.1 创建XBAP应用程序 692
24.5.2 部署XBAP应用程序 693
24.5.3 更新XBAP应用程序 695
24.5.4 XBAP应用程序的安全性 695
24.5.5 完全信任的XBAP应用程序 696
24.5.6 组合XBAP/独立应用程序 697
24.5.7 为不同的安全级别编写代码 697
24.5.8 在网页中嵌入XBAP
应用程序 702
24.6 WebBrowser控件 702
24.6.1 导航到页面 703
24.6.2 构建DOM树 704
24.6.3 使用.NET代码为网页添加
脚本 706
24.7 小结 708
第25章 菜单、工具栏和功能区 709
25.1 菜单 709
25.1.1 Menu类 710
25.1.2 菜单项 710
25.1.3 ContextMenu类 712
25.1.4 菜单分隔条 713
25.2 工具栏和状态栏 714
25.2.1 ToolBar控件 714
25.2.2 StatusBar控件 717
25.3 功能区 718
25.3.1 添加功能区 719
25.3.2 应用程序菜单 720
25.3.3 选项卡、组与按钮 722
25.3.4 富工具提示 724
25.3.5 带有快捷键提示的键盘访问 725
25.3.6 改变功能区的大小 726
25.3.7 快速访问工具栏 729
25.4 小结 730
第26章 声音和视频 731
26.1 播放WAV音频 731
26.1.1 SoundPlayer类 731
26.1.2 SoundPlayerAction类 733
26.1.3 系统声音 733
26.2 MediaPlayer类 734
26.3 MediaElement类 735
26.3.1 使用代码播放音频 736
26.3.2 处理错误 737
26.3.3 使用触发器播放音频 737
26.3.4 播放多个声音 739
26.3.5 改变音量、平衡、速度以及
位置 740
26.3.6 将动画同步到音频 742
26.3.7 播放视频 744
26.3.8 视频效果 744
26.4 语音 747
26.4.1 语音合成 747
26.4.2 语音识别 749
26.5 小结 751
第27章 3D绘图 753
27.1 3D绘图基础 753
27.1.1 视口 754
27.1.2 3D对象 754
27.1.3 摄像机 761
27.2 深入研究3D绘图 765
27.2.1 着色和法线 766
27.2.2 更复杂的形状 769
27.2.3 Model3DGroup集合 769
27.2.4 使用材质 771
27.2.5 纹理映射 773
27.3 交互和动画 777
27.3.1 变换 777
27.3.2 旋转 778
27.3.3 飞过 779
27.3.4 跟踪球 781
27.3.5 命中测试 782
27.3.6 3D表面上的2D元素 786
27.4 小结 789
第Ⅶ部分 文档和打印
第28章 文档 793
28.1 理解文档 793
28.2 流文档 794
28.2.1 流内容元素 795
28.2.2 设置内容元素的格式 796
28.2.3 创建简单的流文档 797
28.2.4 块元素 799
28.2.5 内联元素 804
28.2.6 通过代码与元素进行交互 809
28.2.7 文本对齐 812
28.3 只读流文档容器 813
28.3.1 缩放 814
28.3.2 创建页面和列 815
28.3.3 从文件加载文档 817
28.3.4 打印 818
28.4 编辑流文档 818
28.4.1 加载文件 819
28.4.2 保存文件 821
28.4.3 设置所选文本的格式 822
28.4.4 获取单个单词 824
28.5 固定文档 825
28.6 批注 826
28.6.1 批注类 827
28.6.2 启用批注服务 828
28.6.3 创建批注 829
28.6.4 检查批注 832
28.6.5 响应批注更改 835
28.6.6 在固定文档中保存批注 835
28.6.7 自定义便签的外观 836
28.7 小结 837
第29章 打印 839
29.1 基本打印 839
29.1.1 打印元素 840
29.1.2 变换打印输出 842
29.1.3 打印不显示的元素 844
29.1.4 打印文档 845
29.1.5 在文档打印输出中控制页面 848
29.2 自定义打印 851
29.2.1 使用可视化层中的类
进行打印 851
29.2.2 自定义多页打印 854
29.3 打印设置和管理 859
29.3.1 保存打印设置 859
29.3.2 打印页面范围 859
29.3.3 管理打印队列 860
29.4 通过XPS进行打印 863
29.4.1 为打印预览创建XPS文档 863
29.4.2 写入内存的XPS文档 864
29.4.3 通过XPS直接打印到
打印机 865
29.4.4 异步打印 866
29.5 小结 866
第Ⅷ部分 其他主题
第30章 与Windows窗体进行交互 869
30.1 访问互操作性 869
30.2 混合窗口和窗体 870
30.2.1 为WPF应用程序添加窗体 870
30.2.2 为Windows窗体应用程序
添加WPF窗口 870
30.2.3 显示模态窗口和窗体 871
30.2.4 显示非模态窗口和窗体 871
30.2.5 启用Windows窗体控件的
可视化风格 872
30.3 创建具有混合内容的窗口 872
30.3.1 WPF和Windows窗体
“空域” 873
30.3.2 在WPF中驻留Windows
窗体控件 874
30.3.3 使用WPF和Windows窗体
用户控件 876
30.3.4 在Windows窗体中驻留WPF
控件 877
30.3.5 访问键、助记码和焦点 879
30.3.6 属性映射 880
30.4 小结 882
第31章 多线程 883
31.1 了解多线程模型 883
31.1.1 Dispatcher类 884
31.1.2 DispatcherObject类 884
31.2 BackgroundWorker类 887
31.2.1 简单的异步操作 887
31.2.2 创建BackgroundWorker
对象 888
31.2.3 运行BackgroundWorker
对象 889
31.2.4 跟踪进度 891
31.2.5 支持取消 893
31.3 小结 894
第32章 插件模型 895
32.1 在MAF和MEF两者间
进行选择 895
32.2 了解插件管道 896
32.2.1 管道的工作原理 897
32.2.2 插件文件夹结构 898
32.2.3 为使用插件模型准备
解决方案 899
32.3 创建使用插件模型的
应用程序 900
32.3.1 协定 901
32.3.2 插件视图 901
32.3.3 插件 902
32.3.4 插件适配器 902
32.3.5 宿主视图 903
32.3.6 宿主适配器 904
32.3.7 宿主 904
32.3.8 更多插件 907
32.4 与宿主进行交互 908
32.5 可视化插件 912
32.6 小结 915
第33章 ClickOnce部署 917
33.1 理解应用程序部署 917
33.1.1 ClickOnce安装模型 918
33.1.2 ClickOnce部署的局限性 919
33.2 简单的ClickOnce发布 920
33.2.1 设置发布者和产品 920
33.2.2 启动发布向导 922
33.2.3 理解部署文件的结构 926
33.2.4 安装ClickOnce应用程序 926
33.2.5 更新ClickOnce应用程序 928
33.3 ClickOnce附加选项 928
33.3.1 发布版本 928
33.3.2 更新 929
33.3.3 文件关联 930
33.3.4 发布选项 931
33.4 小结 932
XAML码如下: <StackPanel> <Button x:Name="btnProcessFile" Margin="5" C
1 <Window x:Class="AsynchronousLoading.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006...
1.窗体启动:
WPF工程新建,默认启动方式为MainWindow窗体启动,程序直接以主窗体构造函数启动(F11启动程序可测试)。若想在启动前执行其他操作,可以对App.OnStartup进行重写。
修改App.xaml文件中StartupUri属性,可以修改启动窗体。
2.代码启动
在工程下新建启动操作类(Program),创建启动函数
static class Program
/// <summary>
/// 应用程序的主...
1.懒加载基本懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化2.使用懒加载的好处:(1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强
(2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
最近做项目,点开WPF程序,界面半天不打开,要过一会界面才出来,于是想到给它做一个splash window.
最开始想到的方法是:程序启动的时候,new 一个窗口(带有动画的等待),调用Show方法不阻塞后面的进行来显示。如下所示:namespace WPF_SplashTest
/// <summary>
/// Interaction logic for App.xaml