WPF..如何通过编程为菜单添加图标?

xiangtanboy 2011-03-11 04:23:25
如题, 用下面的代码添加的效果, 是菜单前面显示 "(Icon)", 而不是图标..

MenuItem item = new MenuItem();
item.Header = "新建项";
menu.Items.Insert(0, item);
item.Icon = System.Drawing.Icon.ExtractAssociatedIcon("...");


如果将 Icon 设置为磁盘上的某图标文件, 菜单前面显示的就是那文件的路径, 也不是图标.

项目目标框架是 Framework 3.5
...全文
358 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangtanboy 2011-03-17
  • 打赏
  • 举报
回复
我当然知道用xaml比较好, 简单省事

不过偏偏我要的菜单就是动态生成的, 上面我只贴出了部分跟图标相关的代码, 还有另外菜单相关数据的获取及处理的代码已经省略...

一个注册表项里面有若干个程序的路径及对应的程序名称, 如
名称:Adobe Fireworks CS5, 类型:REG_SZ, 值:D:\Adobe\Adobe Fireworks CS5\Fireworks.exe
我要实现的功能就是, 取出每一条数据, 生成一个菜单项, 前面有对应程序的图标, 点击可以执行该程序


private void CreateMenu()
{
RegistryKey list = setting.OpenSubKey("ProgramList");
if (list == null) return;

foreach (string prog in list.GetValueNames())
{
MenuItem item = new MenuItem {
Header = prog,
Tag = list.GetValue(prog),
Icon = Helper.GetExeIcon(list.GetValue(prog).ToString())
};
item.Click += new RoutedEventHandler(OpenWith);
menu.Items.Insert(0, item);
}
}


GetExeIcon如下:

static public Image GetExeIcon(string exeName)
{
System.IO.MemoryStream men = new System.IO.MemoryStream();
System.Drawing.Icon.ExtractAssociatedIcon(exeName).Save(men);
return new Image { Source = new BitmapImage { StreamSource = men } };
}


不知以上代码有什么问题, 请大神赐教
dfghdfherty 2011-03-11
  • 打赏
  • 举报
回复

vrhero
说的意思是用xaml来做这件事,UI在wpf中用xaml好
ktei2008 2011-03-11
  • 打赏
  • 举报
回复
不知道你为什么非要写code-behind。其实最好将UI部分的东西声明在xaml里。
xiangtanboy 2011-03-11
  • 打赏
  • 举报
回复
受教了, 不是我非得用winform那套, 只是 MenuItem的Icon类型显示为object, 而没有明确指定是Image类型. 不知楼上如何看出用的是winform那套?
vrhero 2011-03-11
  • 打赏
  • 举报
回复
MenuItem的Icon必须是个Image对象,由Image加载图像...

既然是WPF,就别把Winform那套往里套...
xiangtanboy 2011-03-11
  • 打赏
  • 举报
回复
ExtractAssociatedIcon返回的就是Icon类型.

TO colinfang2006:
请看代码下面的一行说明. 如果保存成图片再设置在图标, 就会显示 "X:\...\..ico" 了
636f6c696e 2011-03-11
  • 打赏
  • 举报
回复
先把图片保存下来呗,哪有你这么急的
第Ⅰ部分 基础知识 第1章 WPF概述 3 1.1 Windows图形演化 3 1.1.1 DirectX:新的图形引擎 4 1.1.2 硬件加速与WPF 4 1.2 WPF:高级API 4 1.3 分辨率无关性 5 1.3.1 WPF单位 6 1.3.2 系统DPI 7 1.3.3 位图和矢量图形 9 1.4 WPF体系结构 10 1.5 WPF 4.5 13 1.5.1 WPF工具包 14 1.5.2 Visual Studio 2012 14 1.6 小结 16 第2章 XAML 17 2.1 理解XAML 17 2.1.1 WPF之前的图形用户界面 17 2.1.2 XAML变体 19 2.1.3 XAML编译 19 2.2 XAML基础 20 2.2.1 XAML名称空间 21 2.2.2 代码隐藏类 22 2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 35 2.4 使用其他名称空间中的类型 36 2.5 加载和编译XAML 38 2.5.1 只使用代码 38 2.5.2 使用代码和未经编译的XAML 40 2.5.3 使用代码和编译过的XAML 42 2.5.4 只使用XAML 44 2.6 小结 45 第3章 布局 47 3.1 理解WPF中的布局 47 3.1.1 WPF布局原则 47 3.1.2 布局过程 48 3.1.3 布局容器 48 3.2 使用StackPanel面板进行简单 布局 50 3.2.1 布局属性 52 3.2.2 对齐方式 52 3.2.3 边距 53 3.2.4 最小尺寸、最大尺寸以及显式地 设置尺寸 54 3.2.5 Border控件 56 3.3 WrapPanel和DockPanel面板 57 3.3.1 WrapPanel面板 57 3.3.2 DockPanel面板 58 3.3.3 嵌套布局容器 59 3.4 Grid面板 60 3.4.1 调整行和列 63 3.4.2 布局舍入 64 3.4.3 跨越行和列 65 3.4.4 分割窗口 66 3.4.5 共享尺寸组 69 3.4.6 UniformGrid面板 72 3.5 使用Canvas面板进行基于 坐标的布局 72 3.5.1 Z顺序 73 3.5.2 lnkCanvas元素 74 3.6 布局示例 76 3.6.1 列设置 76 3.6.2 动态内容 77 3.6.3 组合式用户界面 79 3.7 小结 80 第4章 依赖项属性 83 4.1 理解依赖项属性 83 4.1.1 定义依赖项属性 84 4.1.2 注册依赖项属性 84 4.1.3 添加属性包装器 86 4.1.4 WPF使用依赖项属性的方式 87 4.1.5 共享的依赖项属性 88 4.1.6 附加的依赖项属性 88 4.2 属性验证 90 4.2.1 验证回调 90 4.2.2 强制回调 91 4.3 小结 93 第5章 路由事件 95 5.1 理解路由事件 95 5.1.1 定义、注册和封装路由事件 95 5.1.2 共享路由事件 96 5.1.3 引发路由事件 96 5.1.4 处理路由事件 97 5.2 事件路由 99 5.2.1 RoutedEventArgs类 100 5.2.2 冒泡路由事件 100 5.2.3 处理挂起的事件 103 5.2.4 附加事件 103 5.2.5 隧道路由事件 105 5.3 WPF事件 106 5.3.1 生命周期事件 106 5.3.2 输入事件 108 5.4 键盘输入 108 5.4.1 处理按键事件 109 5.4.2 焦点 111 5.4.3 获取键盘状态 112 5.5 鼠标输入 113 5.5.1 鼠标单击 115 5.5.2 捕获鼠标 115 5.5.3 鼠标拖放 116 5.6 多点触控输入 118 5.6.1 多点触控的输入层次 119 5.6.2 原始触控 119 5.6.3 操作 122 5.6.4 惯性 124 5.7 小结 125 第Ⅱ部分 进一步研究WPF 第6章 控件 129 6.1 控件类 129 6.1.1 背景画刷和前景画刷 130 6.1.2 字体 132 6.1.3 鼠标光标 136 6.2 内容控件 137 6.2.1 Content属性 138 6.2.2 对齐内容 140 6.2.3 WPF内容原则 141 6.2.4 标签 142 6.2.5 按钮 142 6.2.6 工具提示 145 6.3 特殊容器 151 6.3.1 ScrollViewer 152 6.3.2 GroupBox 154 6.3.3 TabItem 154 6.3.4 Expander 155 6.4 文本控件 158 6.4.1 多行文本 158 6.4.2 选择文本 159 6.4.3 拼写检查 160 6.4.4 PasswordBox 162 6.5 列表控件 162 6.5.1 ListBox 163 6.5.2 ComboBox 166 6.6 基于范围的控件 166 6.6.1 Slider 167 6.6.2 ProgressBar 168 6.7 日期控件 169 6.8 小结 171 第7章 Application类 173 7.1 应用程序的生命周期 173 7.1.1 创建Application对象 173 7.1.2 派生自定义的Application类 174 7.1.3 应用程序的关闭方式 176 7.1.4 应用程序事件 177 7.2 Application类的任务 179 7.2.1 显示初始界面 179 7.2.2 处理命令行参数 180 7.2.3 访问当前Application对象 181 7.2.4 在窗口之间进行交互 182 7.2.5 单实例应用程序 184 7.3 程序集资源 189 7.3.1 添加资源 189 7.3.2 检索资源 190 7.3.3 pack URI 192 7.3.4 内容文件 193 7.4 本地化 193 7.4.1 构建能够本地化的用户界面 194 7.4.2 使应用程序为本地化做好准备 194 7.4.3 管理翻译过程 195 7.5 小结 200 第8章 元素绑定 201 8.1 将元素绑定到一起 201 8.1.1 绑定表达式 202 8.1.2 绑定错误 203 8.1.3 绑定模式 203 8.1.4 使用代码创建绑定 205 8.1.5 使用代码检索绑定 206 8.1.6 多绑定 207 8.1.7 绑定更新 210 8.1.8 绑定延迟 211 8.2 绑定到非元素对象 211 8.2.1 Source属性 212 8.2.2 RelativeSource属性 212 8.2.3 DataContext属性 213 8.3 小结 214 第9章 命令 215 9.1 理解命令 215 9.2 WPF命令模型 216 9.2.1 ICommand接口 217 9.2.2 RoutedCommand类 217 9.2.3 RoutedUICommand类 218 9.2.4 命令库 219 9.3 执行命令 220 9.3.1 命令源 220 9.3.2 命令绑定 221 9.3.3 使用多命令源 223 9.3.4 微调命令文本 224 9.3.5 直接调用命令 224 9.3.6 禁用命令 225 9.3.7 具有内置命令的控件 227 9.4 高级命令 229 9.4.1 自定义命令 229 9.4.2 在不同位置使用相同的命令 230 9.4.3 使用命令参数 232 9.4.4 跟踪和翻转命令 233 9.5 小结 237 第10章 资源 239 10.1 资源基础 239 10.1.1 资源集合 239 10.1.2 资源的层次 241 10.1.3 静态资源和动态资源 242 10.1.4 非共享资源 243 10.1.5 通过代码访问资源 244 10.1.6 应用程序资源 244 10.1.7 系统资源 245 10.2 资源字典 246 10.2.1 创建资源字典 246 10.2.2 使用资源字典 247 10.2.3 在程序集之间共享资源 248 10.3 小结 251 第11章 样式和行为 253 11.1 样式基础 253 11.1.1 创建样式对象 256 11.1.2 设置属性 257 11.1.3 关联事件处理程序 258 11.1.4 多层样式 259 11.1.5 通过类型自动应用样式 261 11.2 触发器 262 11.2.1 简单触发器 262 11.2.2 事件触发器 264 11.3 行为 266 11.3.1 获取行为支持 266 11.3.2 理解行为模型 267 11.3.3 创建行为 268 11.3.4 使用行为 270 11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 使用Viewbox控件缩放形状 280 12.1.5 直线 282 12.1.6 折线 283 12.1.7 多边形 284 12.1.8 直线线帽和直线交点 286 12.1.9 点划线 287 12.1.10 像素对齐 288 12.2 画刷 289 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
第Ⅰ部分 基础知识 第1章 WPF概述 3 1.1 Windows图形演化 3 1.1.1 DirectX:新的图形引擎 4 1.1.2 硬件加速与WPF 4 1.2 WPF:高级API 4 1.3 分辨率无关性 5 1.3.1 WPF单位 6 1.3.2 系统DPI 7 1.3.3 位图和矢量图形 9 1.4 WPF体系结构 10 1.5 WPF 4.5 13 1.5.1 WPF工具包 14 1.5.2 Visual Studio 2012 14 1.6 小结 16 第2章 XAML 17 2.1 理解XAML 17 2.1.1 WPF之前的图形用户界面 17 2.1.2 XAML变体 19 2.1.3 XAML编译 19 2.2 XAML基础 20 2.2.1 XAML名称空间 21 2.2.2 代码隐藏类 22 2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 35 2.4 使用其他名称空间中的类型 36 2.5 加载和编译XAML 38 2.5.1 只使用代码 38 2.5.2 使用代码和未经编译的XAML 40 2.5.3 使用代码和编译过的XAML 42 2.5.4 只使用XAML 44 2.6 小结 45 第3章 布局 47 3.1 理解WPF中的布局 47 3.1.1 WPF布局原则 47 3.1.2 布局过程 48 3.1.3 布局容器 48 3.2 使用StackPanel面板进行简单 布局 50 3.2.1 布局属性 52 3.2.2 对齐方式 52 3.2.3 边距 53 3.2.4 最小尺寸、最大尺寸以及显式地 设置尺寸 54 3.2.5 Border控件 56 3.3 WrapPanel和DockPanel面板 57 3.3.1 WrapPanel面板 57 3.3.2 DockPanel面板 58 3.3.3 嵌套布局容器 59 3.4 Grid面板 60 3.4.1 调整行和列 63 3.4.2 布局舍入 64 3.4.3 跨越行和列 65 3.4.4 分割窗口 66 3.4.5 共享尺寸组 69 3.4.6 UniformGrid面板 72 3.5 使用Canvas面板进行基于 坐标的布局 72 3.5.1 Z顺序 73 3.5.2 lnkCanvas元素 74 3.6 布局示例 76 3.6.1 列设置 76 3.6.2 动态内容 77 3.6.3 组合式用户界面 79 3.7 小结 80 第4章 依赖项属性 83 4.1 理解依赖项属性 83 4.1.1 定义依赖项属性 84 4.1.2 注册依赖项属性 84 4.1.3 添加属性包装器 86 4.1.4 WPF使用依赖项属性的方式 87 4.1.5 共享的依赖项属性 88 4.1.6 附加的依赖项属性 88 4.2 属性验证 90 4.2.1 验证回调 90 4.2.2 强制回调 91 4.3 小结 93 第5章 路由事件 95 5.1 理解路由事件 95 5.1.1 定义、注册和封装路由事件 95 5.1.2 共享路由事件 96 5.1.3 引发路由事件 96 5.1.4 处理路由事件 97 5.2 事件路由 99 5.2.1 RoutedEventArgs类 100 5.2.2 冒泡路由事件 100 5.2.3 处理挂起的事件 103 5.2.4 附加事件 103 5.2.5 隧道路由事件 105 5.3 WPF事件 106 5.3.1 生命周期事件 106 5.3.2 输入事件 108 5.4 键盘输入 108 5.4.1 处理按键事件 109 5.4.2 焦点 111 5.4.3 获取键盘状态 112 5.5 鼠标输入 113 5.5.1 鼠标单击 115 5.5.2 捕获鼠标 115 5.5.3 鼠标拖放 116 5.6 多点触控输入 118 5.6.1 多点触控的输入层次 119 5.6.2 原始触控 119 5.6.3 操作 122 5.6.4 惯性 124 5.7 小结 125 第Ⅱ部分 进一步研究WPF 第6章 控件 129 6.1 控件类 129 6.1.1 背景画刷和前景画刷 130 6.1.2 字体 132 6.1.3 鼠标光标 136 6.2 内容控件 137 6.2.1 Content属性 138 6.2.2 对齐内容 140 6.2.3 WPF内容原则 141 6.2.4 标签 142 6.2.5 按钮 142 6.2.6 工具提示 145 6.3 特殊容器 151 6.3.1 ScrollViewer 152 6.3.2 GroupBox 154 6.3.3 TabItem 154 6.3.4 Expander 155 6.4 文本控件 158 6.4.1 多行文本 158 6.4.2 选择文本 159 6.4.3 拼写检查 160 6.4.4 PasswordBox 162 6.5 列表控件 162 6.5.1 ListBox 163 6.5.2 ComboBox 166 6.6 基于范围的控件 166 6.6.1 Slider 167 6.6.2 ProgressBar 168 6.7 日期控件 169 6.8 小结 171 第7章 Application类 173 7.1 应用程序的生命周期 173 7.1.1 创建Application对象 173 7.1.2 派生自定义的Application类 174 7.1.3 应用程序的关闭方式 176 7.1.4 应用程序事件 177 7.2 Application类的任务 179 7.2.1 显示初始界面 179 7.2.2 处理命令行参数 180 7.2.3 访问当前Application对象 181 7.2.4 在窗口之间进行交互 182 7.2.5 单实例应用程序 184 7.3 程序集资源 189 7.3.1 添加资源 189 7.3.2 检索资源 190 7.3.3 pack URI 192 7.3.4 内容文件 193 7.4 本地化 193 7.4.1 构建能够本地化的用户界面 194 7.4.2 使应用程序为本地化做好准备 194 7.4.3 管理翻译过程 195 7.5 小结 200 第8章 元素绑定 201 8.1 将元素绑定到一起 201 8.1.1 绑定表达式 202 8.1.2 绑定错误 203 8.1.3 绑定模式 203 8.1.4 使用代码创建绑定 205 8.1.5 使用代码检索绑定 206 8.1.6 多绑定 207 8.1.7 绑定更新 210 8.1.8 绑定延迟 211 8.2 绑定到非元素对象 211 8.2.1 Source属性 212 8.2.2 RelativeSource属性 212 8.2.3 DataContext属性 213 8.3 小结 214 第9章 命令 215 9.1 理解命令 215 9.2 WPF命令模型 216 9.2.1 ICommand接口 217 9.2.2 RoutedCommand类 217 9.2.3 RoutedUICommand类 218 9.2.4 命令库 219 9.3 执行命令 220 9.3.1 命令源 220 9.3.2 命令绑定 221 9.3.3 使用多命令源 223 9.3.4 微调命令文本 224 9.3.5 直接调用命令 224 9.3.6 禁用命令 225 9.3.7 具有内置命令的控件 227 9.4 高级命令 229 9.4.1 自定义命令 229 9.4.2 在不同位置使用相同的命令 230 9.4.3 使用命令参数 232 9.4.4 跟踪和翻转命令 233 9.5 小结 237 第10章 资源 239 10.1 资源基础 239 10.1.1 资源集合 239 10.1.2 资源的层次 241 10.1.3 静态资源和动态资源 242 10.1.4 非共享资源 243 10.1.5 通过代码访问资源 244 10.1.6 应用程序资源 244 10.1.7 系统资源 245 10.2 资源字典 246 10.2.1 创建资源字典 246 10.2.2 使用资源字典 247 10.2.3 在程序集之间共享资源 248 10.3 小结 251 第11章 样式和行为 253 11.1 样式基础 253 11.1.1 创建样式对象 256 11.1.2 设置属性 257 11.1.3 关联事件处理程序 258 11.1.4 多层样式 259 11.1.5 通过类型自动应用样式 261 11.2 触发器 262 11.2.1 简单触发器 262 11.2.2 事件触发器 264 11.3 行为 266 11.3.1 获取行为支持 266 11.3.2 理解行为模型 267 11.3.3 创建行为 268 11.3.4 使用行为 270 11.3.5 Blend中的设计时行为支持 271 11.4 小结 271 第Ⅲ部分 图画和动画 第12章 形状、画刷和变换 275 12.1 理解形状 275 12.1.1 Shape类 276 12.1.2 矩形和椭圆 277 12.1.3 改变形状的尺寸和放置形状 278 12.1.4 使用Viewbox控件缩放形状 280 12.1.5 直线 282 12.1.6 折线 283 12.1.7 多边形 284 12.1.8 直线线帽和直线交点 286 12.1.9 点划线 287 12.1.10 像素对齐 288 12.2 画刷 289 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
绝对经典完整的入门教程 由于70MB的文件限制 分为两节下载 搜索“[Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(2/2)”可以下载另外一半 或者直接打开链接“http://download.csdn.net/detail/sfstream6/8240837” 目 录 第1 章 初识Visual Basic 2010 ............ 1 1.1 事件驱动编程 .............................. 2 1.2 安装Visual Basic 2010 ................ 3 1.3 Visual Basic 2010 集成开发 环境 .............................................. 5 1.3.1 初始化开发环境 ...................... 6 1.3.2 菜单 .......................................... 6 1.3.3 工具栏 ...................................... 7 1.4 创建简单的应用程序 .................. 8 1.4.1 工具箱 .................................... 11 1.4.2 改进型匈牙利表示法 ............ 13 1.4.3 代码编辑器 ............................ 14 1.5 使用帮助系统 ............................ 17 1.6 小结 ............................................ 18 1.7 练习 ............................................ 18 第2 章 .NET Framework 概述 ............ 19 2.1 微软的信心来自于Windows .... 19 2.1.1 MSN 1.0 .................................. 20 2.1.2 .NET理念 .............................. 20 2.1.3 .NET与Java 有些类似 .......... 21 2.1.4 现在所处的阶段 .................... 22 2.2 为Windows 编写软件 ............... 22 2.2.1 .NET Framework类 ............... 23 2.2.2 执行代码 ................................ 24 2.3 公共语言运行时 ........................ 25 2.3.1 载入并执行代码 .................... 25 2.3.2 应用程序隔离 ........................ 25 2.3.3 安全性 .................................... 25 2.3.4 互操作 .................................... 26 2.3.5 异常处理 ................................ 26 2.4 通用类型系统和公共语言 规范 ............................................ 26 2.5 小结 ............................................ 27 第3 章 编写软件 ................................ 29 3.1 信息和数据 ................................ 29 3.1.1 算法 ........................................ 29 3.1.2 编程语言 ................................ 30 3.2 变量 ............................................ 31 3.3 注释和空白 ................................ 33 3.3.1 注释 ........................................ 33 3.3.2 空白 ........................................ 35 3.4 数据类型 .................................... 35 3.4.1 数字类型 ................................ 35 3.4.2 常见的整型数学运算 ............. 36 3.4.3 整型运算的缩写方式 ............. 38 3.4.4 浮点型数学运算 ..................... 40 3.4.5 字符串类型 ............................ 42 3.4.6 使用日期 ................................ 49 3.4.7 布尔类型 ................................ 54 3.5 存储变量 .................................... 55 3.5.1 二进制 .................................... 55 3.5.2 位和字节 ................................ 55 3.5.3 值的表示 ................................ 56 3.5.4 值的转换 ................................ 57 3.6 方法 ............................................ 58 3.6.1 使用方法的原因 ..................... 59 3.6.2 前面曾介绍过的方法 ............. 59 3.6.3 创建方法 ................................ 62 3.6.4 选择方法名称 ........................ 65 3.6.5 作用域 .................................... 65 3.7 小结 ............................................ 67 3.8 练习 ............................................ 68 第4 章 流程控制 .................................. 69 4.1 作出决策 .................................... 69 Visual Basic 2010 入门经典( 第6 版) X 4.2 If 语句 ........................................ 70 4.2.1 Else 语句 ................................ 71 4.2.2 可进行多重选择的ElseIf 语句 ........................................ 72 4.2.3 嵌套的If 语句 ........................ 73 4.2.4 单行If 语句 ............................ 73 4.2.5 比较运算符 ............................ 74 4.2.6 字符串比较 ............................ 81 4.3 Select Case 语句 ........................ 83 4.3.1 不区分大小写的Select Case 语句 ........................................ 86 4.3.2 多重选择 ................................ 88 4.3.3 Case Else 语句 ........................ 89 4.3.4 Select Case 中的不同数据 类型 ........................................ 89 4.4 循环 ............................................ 90 4.4.1 For…Next 循环 ..................... 90 4.4.2 Do…Loop 循环 ...................... 95 4.4.3 嵌套循环 ................................ 99 4.4.4 提前退出循环 ...................... 100 4.4.5 死循环 .................................. 102 4.5 小结 .......................................... 103 4.6 练习 .......................................... 104 第5 章 处理数据结构 ....................... 105 5.1 数组 .......................................... 105 5.1.1 定义和使用数组 .................. 105 5.1.2 使用 For Each…Next 循环 .... 108 5.1.3 将数组作为参数传递 .......... 110 5.1.4 数组的排序 .......................... 112 5.1.5 反向检索 .............................. 113 5.1.6 用值初始化数组 .................. 115 5.2 枚举 .......................................... 116 5.2.1 使用枚举 .............................. 116 5.2.2 确定状态 .............................. 119 5.2.3 设置无效值 .......................... 121 5.3 常量 .......................................... 121 5.3.1 使用常量 .............................. 122 5.3.2 各种常量类型 ...................... 123 5.4 结构 .......................................... 123 5.4.1 创建结构 .............................. 124 5.4.2 为结构添加属性 .................. 126 5.5 数组列表 .................................. 127 5.5.1 使用数组列表 ..................... 127 5.5.2 在数组列表中进行删除 操作 ..................................... 131 5.5.3 显示数组列表中的项 .......... 134 5.6 集合 .......................................... 134 5.6.1 创建 CustomerCollection 类 ... 135 5.6.2 添加Item 属性 .................... 136 5.7 使用散列表创建查询表 .......... 138 5.7.1 使用散列表 ......................... 138 5.7.2 Remove、RemoveAt和Clear 方法 ..................................... 141 5.7.3 区分大小写 ......................... 143 5.8 高级数组操作 .......................... 144 5.8.1 动态数组 ............................. 144 5.8.2 使用Preserve 关键字 .......... 146 5.9 小结 .......................................... 147 5.10 练习 ........................................ 147 第6 章 可扩展应用程序标记语言 (XAML) ................................ 149 6.1 什么是XAML ......................... 149 6.2 XAML语法 ............................. 150 6.3 WPF .......................................... 153 6.3.1 创建一个富WPF用户 界面 ..................................... 154 6.3.2 使用WPF通用控件 ........... 159 6.3.3 连接事件 ............................. 163 6.4 小结 .......................................... 166 6.5 练习 .......................................... 167 第7 章 构建Windows应用程序 ...... 169 7.1 响应事件 .................................. 169 7.2 创建简单的应用程序 .............. 176 7.2.1 构建窗体 ............................. 176 7.2.2 统计字符 ............................. 179 7.2.3 统计单词 ............................. 181 7.3 创建更复杂的应用程序 .......... 187 7.3.1 Text Editor 项目 .................. 187 7.3.2 创建工具栏 ......................... 187 目 录 XI 7.3.3 创建状态栏 .......................... 191 7.3.4 创建编辑框 .......................... 193 7.3.5 清除编辑框 .......................... 194 7.3.6 响应工具栏按钮 .................. 197 7.4 使用多个窗体 .......................... 202 7.5 小结 .......................................... 205 7.6 练习 .......................................... 206 第8 章 显示对话框 ........................... 207 8.1 MessageBox 对话框 ................ 207 8.1.1 MessageBox中的可用 图标 ...................................... 208 8.1.2 MessageBox中的可用 按钮 ...................................... 208 8.1.3 设置默认按钮 ...................... 209 8.1.4 其他选项 .............................. 209 8.1.5 Show 方法的语法 ................ 209 8.1.6 MessageBox的示例 ............. 211 8.2 OpenFileDialog 控件 ............... 214 8.2.1 OpenFileDialog 控件 ............ 214 8.2.2 OpenFileDialog 的属性 ........ 215 8.2.3 OpenFileDialog 的方法 ........ 216 8.2.4 使用OpenFileDialog 控件 ... 216 8.3 SaveFileDialog 控件 ................ 220 8.3.1 SaveFileDialog 的属性 ........ 221 8.3.2 SaveFileDialog 的方法 ........ 221 8.3.3 使用SaveFileDialog控件 .... 221 8.4 FontDialog 控件 ....................... 225 8.4.1 FontDialog 的属性 ............... 225 8.4.2 FontDialog 的方法 ............... 225 8.4.3 使用FontDialog 控件 .......... 225 8.5 ColorDialog 控件 ..................... 228 8.5.1 ColorDialog的属性 ............. 228 8.5.2 使用ColorDialog控件 ........ 229 8.6 PrintDialog 控件 ...................... 230 8.6.1 PrintDialog 的属性 ............... 231 8.6.2 使用PrintDialog 控件 .......... 231 8.6.3 PrintDocument类 ................. 231 8.6.4 打印文档 .............................. 232 8.7 FolderBrowserDialog控件 ...... 238 8.7.1 FolderBrowserDialog 控件 的属性 ................................. 238 8.7.2 使用FolderBrowserDialog 控件 ..................................... 238 8.8 小结 .......................................... 241 8.9 练习 .......................................... 242 第9 章 创建菜单 .............................. 243 9.1 菜单功能概述 .......................... 243 9.1.1 图形 ..................................... 243 9.1.2 访问键 ................................. 244 9.1.3 快捷键 ................................. 244 9.1.4 复选标记 ............................. 244 9.1.5 Properties窗格 .................... 245 9.2 创建菜单 .................................. 246 9.2.1 设计菜单 ............................. 246 9.2.2 添加工具栏和控件 .............. 247 9.2.3 为菜单编写代码 .................. 249 9.2.4 为View菜单和工具栏编写 代码 ..................................... 253 9.2.5 测试代码 ............................. 254 9.3 上下文菜单 .............................. 256 9.3.1 创建上下文菜单 .................. 256 9.3.2 激活或禁用菜单项和工具栏 按钮 ..................................... 259 9.4 小结 .......................................... 262 9.5 练习 .......................................... 263 第10章 调试和错误处理 ................. 265 10.1 主要错误类型 ........................ 265 10.1.1 语法错误 ......................... 266 10.1.2 执行错误 ......................... 269 10.1.3 逻辑错误 ......................... 269 10.2 调试 ........................................ 270 10.2.1 创建示例项目 ................. 270 10.2.2 设置断点 ......................... 285 10.2.3 使用Watch窗格和 QuickWatch 对话框 进行调试 ......................... 291 10.2.4 使用Autos窗格进行 调试 ................................. 293 Visual Basic 2010 入门经典( 第6 版) XII 10.2.5 使用Locals 窗格进行 调试 .................................. 293 10.3 错误处理 ................................ 294 10.4 小结 ........................................ 298 10.5 练习 ........................................ 298 第11章 构建对象 ............................. 299 11.1 对象的概念 ............................ 299 11.1.1 封装 .................................. 300 11.1.2 方法和属性 ...................... 300 11.1.3 事件 .................................. 301 11.1.4 可见性 .............................. 301 11.1.5 类的概念 .......................... 302 11.2 构建类 .................................... 302 11.3 重用性 .................................... 303 11.4 设计对象 ................................ 304 11.4.1 状态 .................................. 305 11.4.2 行为 .................................. 305 11.4.3 存储状态 .......................... 305 11.4.4 属性 .................................. 308 11.4.5 读/ 写属性 ......................... 311 11.4.6 IsMoving 方法 .................. 313 11.5 构造函数 ................................ 315 11.6 继承 ........................................ 317 11.6.1 添加新方法和属性 .......... 318 11.6.2 添加 GetPowerToWeightRatio 方法 ................................... 320 11.6.3 改变默认值 ...................... 321 11.6.4 多态性 .............................. 323 11.6.5 重写更多的方法 .............. 324 11.6.6 从对象类中继承 .............. 326 11.7 对象和结构 ............................ 326 11.8 .NET Framework 类 ............... 326 11.8.1 名称空间 .......................... 327 11.8.2 Imports 语句 ..................... 328 11.8.3 创建自己的名称空间 ...... 329 11.8.4 .NET Framework 中 的继承 ............................... 331 11.9 小结 ........................................ 332 11.10 练习 ...................................... 332 第12章 面向对象的高级技术 .......... 333 12.1 构建收藏页浏览应用程序 .... 333 12.1.1 Internet 快捷方式和 收藏页 .............................. 333 12.1.2 使用类 ............................. 336 12.1.3 遍历收藏页 ..................... 341 12.1.4 查看收藏页 ..................... 347 12.2 另一个收藏页浏览应用 程序 ........................................ 349 12.2.1 构建收藏页的系统托盘 图标 ................................. 350 12.2.2 显示收藏页 ..................... 351 12.3 使用共享属性和方法 ............ 354 12.3.1 使用共享属性 ................. 355 12.3.2 使用共享方法 ................. 358 12.4 理解面向对象编程和内存 管理 ........................................ 360 12.4.1 垃圾回收 ......................... 361 12.4.2 释放资源 ......................... 361 12.4.3 整理碎片和压缩 ............. 362 12.5 小结 ........................................ 363 12.6 练习 ........................................ 364 第13章 建立类库 ............................ 365 13.1 理解类库 ................................ 365 13.1.1 创建类库 ......................... 366 13.1.2 为Favorites Viewer 项目 创建类库 .......................... 367 13.1.3 多层应用程序 ................. 370 13.2 使用强名 ................................ 371 13.2.1 对程序集签名 ................. 371 13.2.2 程序集的版本 ................. 373 13.3 注册程序集 ............................ 374 13.3.1 Gacutil 实用程序 ............. 374 13.3.2 程序集在References 对话框中不可见的原因 ... 374 13.4 设计类库 ................................ 375 13.5 使用第三方类库 .................... 375 13.6 用对象浏览器查看类 ............ 376 13.7 小结 ........................................ 377 13.8 练习 ........................................ 378 目 录 XIII 第14章 创建Windows窗体用户 控件 ................................... 379 14.1 Windows 窗体控件 ................ 379 14.2 创建和测试用户控件 ............ 380 14.3 给用户控件添加属性、方法 和事件 .................................... 383 14.3.1 给用户控件添加属性 ...... 383 14.3.2 给用户控件添加方法 ...... 385 14.3.3 给用户控件添加事件 ...... 386 14.4 设计期间或运行期间 ............ 389 14.5 创建Command Link控件 ..... 391 14.5.1 创建Command Link 控件 .................................. 392 14.5.2 使用Command Link 控件 .................................. 399 14.6 小结 ........................................ 402 14.7 练习 ........................................ 402 第15章 访问数据库 ......................... 405 15.1 数据库的概念 ........................ 405 15.1.1 Microsoft Access 对象 ..... 406 15.1.2 表 ...................................... 406 15.1.3 查询 .................................. 406 15.2 SQL 中的SELECT 语句 ....... 407 15.3 Access 中的查询 .................... 408 15.4 数据访问组件和控件 ............ 412 15.4.1 DataSet 组件 .................... 412 15.4.2 DataGridView 控件 .......... 413 15.4.3 BindingSource 组件 ......... 413 15.4.4 BindingNavigator 控件 .... 413 15.4.5 TableAdapter 组件 ............ 413 15.5 数据绑定 ................................ 414 15.6 小结 ........................................ 419 15.7 练习 ........................................ 420 第16章 使用SQL Server和ADO.NET 进行数据库编程 .................. 421 16.1 ADO.NET .............................. 422 16.1.1 ADO.NET 数据名称 空间 .................................. 422 16.1.2 SqlConnection 类 ............. 423 16.1.3 SqlCommand类 .............. 425 16.1.4 SqlDataAdapter 类 ........... 427 16.1.5 DataSet 类 ........................ 431 16.1.6 DataView 类 .................... 431 16.2 使用ADO.NET类 ................. 433 16.3 数据绑定 ................................ 441 16.3.1 BindingContext 和 CurrencyManager对象 ... 441 16.3.2 绑定控件 ......................... 442 16.4 小结 ........................................ 468 16.5 练习 ........................................ 468 第17章 动态数据网站 ..................... 469 17.1 创建一个动态数据 LINQ to SQL 网站 ................ 469 17.2 定制动态数据网站的设计 .... 473 17.3 小结 ........................................ 478 17.4 练习 ........................................ 478 第18章 ASP.NET ........................ 479 18.1 瘦客户端体系结构 ................ 479 18.2 Web 窗体和Windows 窗体 的比较 .................................... 480 18.2.1 Windows 窗体的优点 ..... 480 18.2.2 Web 窗体的优点 ............. 481 18.3 Web 应用程序基础 ................ 481 18.3.1 Web 服务器 ..................... 482 18.3.2 浏览器 ............................. 482 18.3.3 HTML .............................. 482 18.3.4 JavaScript ......................... 482 18.3.5 CSS .................................. 482 18.4 关于ASP 页面 ....................... 483 18.4.1 ASP.NET Web 页面的 优点 .................................. 483 18.4.2 特殊的We b 站点文件 .... 483 18.4.3 开发方式 ......................... 483 18.4.4 工具箱 ............................. 484 18.5 构建Web 应用程序 ............... 484 18.5.1 为客户端和服务器端 处理创建We b 窗体 ......... 484 Visual Basic 2010 入门经典( 第6 版) XI V 18.5.2 Visual Studio 2010中 We b 站点的位置 .............. 489 18.5.3 数据的输入和验证 .......... 491 18.5.4 设计布局、主题和导航 .... 496 18.5.5 使用GridView 构建数据 驱动的We b 窗体 ............. 501 18.6 小结 ........................................ 505 18.7 练习 ........................................ 506 第19章 Visual Basic 2010 和XML ... 507 19.1 了解XML .............................. 507 19.1.1 XML 简介 ........................ 508 19.1.2 向Visual Basic编程新手 介绍XML ......................... 510 19.1.3 规则 .................................. 510 19.2 地址簿项目 ............................ 510 19.2.1 创建项目 .......................... 511 19.2.2 SerializableData类 ........... 512 19.2.3 载入XML文件 ............... 517 19.2.4 修改数据 .......................... 519 19.2.5 发送email ........................ 520 19.2.6 创建地址列表 .................. 521 19.2.7 忽略成员 .......................... 525 19.2.8 载入地址 .......................... 527 19.2.9 添加新地址 ...................... 528 19.2.10 地址导航 ........................ 529 19.2.11 删除地址 ........................ 531 19.3 集成地址簿应用程序 ............ 533 19.3.1 集成规则 ......................... 533 19.3.2 从其他应用程序中读取 地址簿 .............................. 534 19.4 小结 ........................................ 539 19.5 练习 ........................................ 540 第20章 部署应用程序 ..................... 541 20.1 部署简介 ................................ 541 20.1.1 ClickOnce 部署 ............... 542 20.1.2 XCOPY 部署 ................... 546 20.2 创建Visual Studio 2010 安装 程序 ........................................ 547 20.3 UI 编辑器 ............................... 550 20.4 部署不同的解决方案 ............ 553 20.4.1 私有程序集 ..................... 553 20.4.2 共享程序集 ..................... 554 20.4.3 部署桌面应用程序 ......... 554 20.4.4 部署Web 应用程序 ........ 554 20.4.5 部署XML Web服务 ....... 555 20.4.6 一些有用的工具 ............. 555 20.5 小结 ........................................ 555 20.6 练习 ........................................ 556 附录A 练习题答案 ........................... 557 附录B 如何深入学习 ....................... 569
Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf 第I部分 语言结构和环境 第1章 visual studio 2010 3 1.1 visual studio 2010:从express到ultimate的各种版本 4 1.2 visual basic的关键字和语法 7 1.2.1 控制台应用程序 10 1.2.2 从项目模板上创建项目 11 1.2.3 solution explorer窗口 13 1.2.4 项目属性 14 1.2.5 assembly information屏幕 15 1.2.6 编译设置 16 1.2.7 调试属性 20 1.2.8 引用 21 1.2.9 资源 23 1.2.10 设置 24 1.2.11 其他项目属性选项卡 26 1.3 provb_vs2010项目 27 1.3.1 在代码中设置窗体属性 29 1.3.2 visual studio的其他组件 37 1.4 增强示例应用程序的功能 37 1.4.1 定制代码 39 1.4.2 构建应用程序 43 1.4.3 重用第一个windows窗体 50 1.5 visual studio 2010中的特色功能 51 1.5.1 构建配置 51 1.5.2 任务列表 53 1.5.3 command窗口 54 1.5.4 server explorer 54 1.5.5 在visual studio 2010中记录和使用宏 55 1.5.6 类图 57 1.5.7 应用程序生命周期管理 58 1.5.8 性能工具 60 1.6 小结 62 第2章 对象和visual basic 63 2.1 面向对象的术语 64 2.1.1 对象、类和实例 64 2.1.2 对象的组成 65 2.1.3 system.object 68 2.2 使用visual basic类型 68 2.2.1 值类型和引用类型 69 2.2.2 基本类型 71 2.3 命令:条件语句 72 2.3.1 if then 73 2.3.2 比较运算符 73 2.3.3 select case 75 2.4 值类型(结构) 75 2.4.1 布尔类型 76 2.4.2 整数类型 77 2.4.3 无符号类型 78 2.4.4 小数类型 78 2.4.5 char和byte类型 81 2.4.6 datetime类型 81 2.5 引用类型(类) 82 2.5.1 object类 82 2.5.2 string类 83 2.5.3 xml字面量 87 2.5.4 dbnull类和isdbnull()函数 89 2.6 参数传递 89 2.7 变量的作用域 91 2.8 使用对象 92 2.8.1 对象的声明和实例化 92 2.8.2 对象引用 93 2.8.3 取消对象的引用 93 2.8.4 前期绑定与后期绑定 94 2.9 数据类型转换 95 2.10 创建类 100 2.10.1 类 100 2.10.2 事件的处理 110 2.10.3 处理多个事件 111 2.10.4 withevents关键字 111 2.10.5 触发事件 111 2.10.6 声明和触发定制事件 112 2.10.7 用withevents关键字接收事件 113 2.10.8 用addhandler接收事件 115 2.10.9 构造函数方法 116 2.10.10 终止和清除 117 2.11 高级概念 118 2.11.1 重载方法 119 2.11.2 重载构造函数方法 121 2.11.3 共享方法、变量和事件 122 2.11.4 运算符重载 127 2.11.5 委托 129 2.11.6 类和组件 133 2.11.7 lambda表达式 134 2.12 小结 135 第3章 定制对象 137 3.1 继承 138 3.1.1 继承的实现 139 3.1.2 继承的层次 157 3.1.3 与基类、类及对象交互 159 3.1.4 构造函数 164 3.1.5 protected作用域 169 3.1.6 事件与继承 171 3.1.7 共享方法 174 3.1.8 共享事件 176 3.1.9 创建抽象基类 176 3.2 多接口 178 3.2.1 对象接口 178 3.2.2 辅助接口 180 3.3 抽象性 185 3.4 封装性 188 3.5 多态性 190 3.5.1 方法签名 190 3.5.2 实现多态性 191 3.6 进一步讨论继承 200 3.7 小结 211 第4章 公共语言运行库 213 4.1 .net应用程序的组成元素 214 4.1.1 模块 214 4.1.2 程序集 215 4.1.3 类型 215 4.2 版本化与部署 216 4.2.1 对版本化更好的支持 216 4.2.2 major.minor.build.revision版本介绍 217 4.2.3 更好的部署 217 4.3 跨语言集成 218 4.3.1 通用类型系统 218 4.3.2 元数据 219 4.3.3 对元数据更好的支持 219 4.3.4 属性 220 4.3.5 reflection api 222 4.4 il反汇编程序 222 4.5 内存管理 223 4.5.1 传统的垃圾回收机制 223 4.5.2 更快地为对象分配内存 230 4.5.3 垃圾回收器的优化 231 4.6 名称空间 232 4.6.1 名称空间的概念 233 4.6.2 名称空间与引用 236 4.6.3 常用的名称空间 237 4.6.4 导入名称空间并指定别名 239 4.6.5 为名称空间指定别名 240 4.6.6 在asp.net中引用名称空间 241 4.7 创建自己的名称空间 241 4.8 my关键字 244 4.8.1 my.application名称空间 244 4.8.2 my.computer名称空间 248 4.8.3 my.forms名称空间 251 4.8.4 my.resources名称空间 251 4.8.5 my.user名称空间 251 4.8.6 my.webservices名称空间 251 4.9 扩展my名称空间 252 4.10 小结 254 第5章 用visual basic进行声明式编程 255 5.1 声明式编程与visual basic 256 5.2 使用xaml创建窗口 257 5.3 xaml语法 260 5.3.1 xaml语言基础 261 5.3.2 使用xaml声明工作流 264 5.4 小结 265 第6章 异常处理和调试 267 6.1 visual studio 2010 team system的新增内容:历史调试 267 6.2 与visual basic 6兼容的注意事项 268 6.3 .net中的异常处理 268 6.4 结构化异常处理的关键字 269 6.4.1 try、catch和finally关键字 270 6.4.2 throw关键字 271 6.4.3 抛出新的异常 272 6.4.4 exit try语句 273 6.4.5 嵌套的try结构 274 6.4.6 异常属性的使用 275 6.4.7 message属性 276 6.4.8 innerexception和targetsite属性 276 6.5 与visual basic 6样式的错误处理交互操作 280 6.6 记录错误 281 6.6.1 事件日志 281 6.6.2 事件、方法和属性 282 6.6.3 写入跟踪文件 284 6.7 小结 286 第7章 测试驱动的开发 287 7.1 测试的内容和方式 288 7.2 visual studio中的tdd工具 290 7.3 单元测试过程 291 7.3.1 创建测试程序 291 7.3.2 运行测试程序 294 7.3.3 测试数据访问代码 295 7.3.4 使用generate from usage特性 302 7.4 其他visual studio版本 306 7.5 第三方测试框架 306 7.6 小结 307 第ii部分 业务对象和数据访问第8章 数组、集合和泛型 311 8.1 数组 312 8.1.1 多维数组 313 8.1.2 ubound函数 314 8.1.3 redim语句 314 8.1.4 preserve关键字 315 8.2 集合 315 8.2.1 循环语句 317 8.2.2 装箱 319 8.3 泛型 320 8.3.1 泛型的使用 321 8.3.2 nullable类型 322 8.3.3 泛型类型 323 8.3.4 泛型方法 326 8.4 创建泛型 327 8.4.1 泛型类型 328 8.4.2 泛型方法 334 8.4.3 约束 335 8.4.4 泛型和后期绑定 338 8.4.5 协变和逆变 339 8.5 小结 340 第9章 在vb中使用xml 341 9.1 xml简介 342 9.2 xml序列化 343 9.3 system.xml文档支持 348 9.4 xml流样式分析程序 348 9.4.1 写入xml流 349 9.4.2 读取xml流 352 9.4.3 文档对象模型(dom) 360 9.5 xslt转换 364 9.5.1 使用xslt转换不同的xml标准 367 9.5.2 system.xml.xsl中定义的其他类和接口 370 9.6 asp.net中的xml 370 9.6.1 xmldatasource服务器控件 370 9.6.2 xmldatasource控件的名称空间问题 374 9.6.3 xml服务器控件 375 9.7 linq to xml 376 9.8 linq to xml帮助对象 376 9.8.1 xdocument对象 377 9.8.2 xelement对象 377 9.8.3 xnamespace对象 378 9.8.4 xattribute对象 380 9.9 visual basic和xml字面量 381 9.10 使用linq查询xml文档 382 9.10.1 查询静态的xml文档 382 9.10.2 查询动态的xml文档 384 9.11 处理xml文档 385 9.11.1 读取xml文档 385 9.11.2 写入xml文档 386 9.12 vb中的lambda表达式 387 9.13 小结 389 第10章 ado.net和linq 391 10.1 ado.net的体系结构 392 10.2 ado.net的基本功能 393 10.2.1 ado.net的常见任务 393 10.2.2 ado.net的基本名称空间和类 398 10.2.3 ado.net组件 399 10.3 .net数据提供程序 400 10.3.1 connection对象 400 10.3.2 command对象 401 10.3.3 通过command对象使用存储过程 402 10.3.4 datareader对象 405 10.3.5 命令的异步执行 407 10.3.6 dataadapter对象 409 10.3.7 sql server .net数据提供程序 413 10.3.8 ole db .net数据提供程序 413 10.4 dataset组件 413 10.4.1 datatablecollection对象 414 10.4.2 datarelationcollection对象 414 10.4.3 extendedproperties属性 414 10.4.4 创建和使用dataset对象 415 10.4.5 ado.net的datatable对象 417 10.4.6 dataset和datatable对象的高级ado.net特性 418 10.5 使用通用提供程序模型 420 10.6 ado.net中的连接池 422 10.7 transactions类和system.transactions名称空间 423 10.7.1 创建事务 423 10.7.2 创建资源管理器 425 10.8 linq to sql 425 10.9 linq to sql和visual basic 426 10.9.1 用linq to sql提取数据:创建控制台应用程序 426 10.9.2 o/r设计器 427 10.9.3 创建product对象 428 10.10 对象到linq对象的映射 429 10.10.1 datacontext对象 430 10.10.2 table(tentity)对象 432 10.11 查询数据库 433 10.11.1 使用查询表达式 433 10.11.2 查询表达式详述 433 10.11.3 用表达式过滤 434 10.11.4 联接 434 10.11.5 数据项的组合 435 10.12 存储过程 437 10.13 更新数据库 438 10.14 小结 440 第11章 使用entity framework访问数据 441 11.1 对象关系映射 441 11.2 entity framework体系结构 442 11.2.1 概念模型 443 11.2.2 存储模型 446 11.2.3 映射模型 447 11.2.4 linq to entities 448 11.2.5 objectcontext 449 11.3 把对象映射到实体上 451 11.3.1 简单映射 451 11.3.2 对多个对象使用一个表 453 11.3.3 对一个对象使用多个表 455 11.4 从模型中生成数据库 457 11.5 小结 460 第12章 使用sql server 461 12.1 sql server compact 462 12.1.1 连接sql server compactedition数据库 463 12.1.2 同步数据 466 12.2 sql server内置的xml功能 472 12.3 sql server中的clr集成 474 12.3.1 决定使用t-sql还是vb 475 12.3.2 创建用户定义的类型 475 12.3.3 创建存储过程 487 12.3.4 在sql server中使用web服务 493 12.3.5 sql server 2008特性 498 12.4 wcf数据服务 499 12.4.1 rest 499 12.4.2 atom和json 499 12.4.3 使用wcf数据服务提供数据 500 12.4.4 wcf数据服务的客户端库 504 12.5 小结 508 第13章 服务(xml/wcf) 509 13.1 服务 510 13.1.1 网络角度 510 13.1.2 应用程序的发展 510 13.1.3 合并网络和应用程序开发 510 13.1.4 web服务基础 511 13.1.5 存在的问题 512 13.1.6 其他技术 512 13.1.7 web服务 513 13.1.8 组合起来 514 13.1.9 wcf服务的构成 514 13.2 向soa迈出一大步 515 13.2.1 wcf的功能 516 13.2.2 协定和元数据 516 13.2.3 使用ws-*协议 517 13.3 建立wcf服务 518 13.4 建立wcf使用者应用程序 524 13.4.1 添加服务引用 525 13.4.2 查看引用 526 13.4.3 配置文件的修改 529 13.4.4 编写使用者应用程序的代码 531 13.5 使用数据协定 533 13.6 名称空间 535 13.6.1 建立主机应用程序 535 13.6.2 建立使用者应用程序 536 13.6.3 查看hellocustomerservice的wsdl和架构 538 13.7 小结 540 第iii部分 智能客户端应用程序第14章 windows窗体 543 14.1 system.windows.forms名称空间 543 14.2 窗体的使用 544 14.2.1 设置启动窗体 544 14.2.2 通过sub main显示窗体 545 14.2.3 application类的更多内容 545 14.2.4 窗体的启动位置 545 14.2.5 窗体边框 545 14.2.6 始终置顶——topmost属性 546 14.2.7 附属窗体 546 14.2.8 改变窗体的透明度 547 14.2.9 可视化继承 549 14.2.10 滚动窗体 549 14.2.11 mdi窗体 549 14.2.12 vb 2010中的mdi样例 550 14.2.13 对话框窗体 551 14.2.14 运行时的窗体 553 14.2.15 默认的窗体实例 554 14.3 控件 554 14.3.1 以tab键切换控件的顺序 554 14.3.2 所有控件的属性 555 14.3.3 动态调整控件的大小和布局 555 14.3.4 flowlayoutpanel控件 557 14.3.5 tablelayoutpanel控件 558 14.3.6 panel和groupbox容器控件 559 14.3.7 扩展的provider控件 560 14.3.8 数据输入的高级功能 562 14.3.9 验证数据输入 564 14.3.10 工具栏与toolstrip控件 565 14.3.11 菜单 568 14.3.12 通用对话框 569 14.3.13 拖放操作 571 14.3.14 标准windows窗体控件小结 573 14.3.15 处理相关控件组 575 14.3.16 在运行时添加控件 576 14.4 其他编程技巧 577 14.5 小结 577 第15章 windows窗体的高级功能 579 15.1 在可视化控件中封装逻辑 579 15.2 在windows窗体中开发自定义的控件 580 15.2.1 继承现有的控件 580 15.2.2 构建复合控件 580 15.2.3 从头编写控件 581 15.3 继承现有的控件 581 15.3.1 基本步骤 581 15.3.2 给派生的控件添加代码 581 15.3.3 其他有用的特性 584 15.3.4 为派生的控件自定义事件 585 15.3.5 限制选中项数的checkedlistbox 586 15.4 control与usercontrol基类 589 15.4.1 control类 589 15.4.2 usercontrol类 589 15.5 复合控件 590 15.5.1 创建复合的user-control 591 15.5.2 改变控件的大小 591 15.5.3 提供子控件的属性 592 15.5.4 一个具体的例子 592 15.6 从头构建控件 595 15.7 给工具箱中的控件添加图标 600 15.8 在控件中嵌入其他控件 601 15.9 小结 602 第16章 集成wpf和windows 窗体的用户控件 605 16.1 集成库 606 16.2 在windows窗体中包含wpf控件 607 16.2.1 创建wpf控件库 608 16.2.2 windows窗体应用程序 610 16.3 在wpf中包含windows 窗体控件 616 16.4 集成的限制 621 16.5 小结 622 第17章 wpf桌面应用程序 623 17.1 内容、位置、原因、方式——wpf策略 624 17.2 光栅图形和矢量图形 625 17.3 下一个windows项目应使用wpf吗 625 17.4 创建wpf应用程序 626 17.4.1 实现定制的wpf应用程序 627 17.4.2 定制用户界面 639 17.4.3 定制按钮 647 17.4.4 wpf用户控件 651 17.5 小结 672 第18章 expression blend 3 675 18.1 了解blend 676 18.2 sketchflow 682 18.2.1 第一个sketchflow 682 18.2.2 sketchflow player 685 18.2.3 归档sketchflow 686 18.3 小结 686 第19章 silverlight 687 19.1 什么是silverlight 687 19.1.1 smooth streaming特性 688 19.1.2 业界标准视频 688 19.1.3 数字版权管理 688 19.2 启动silverlight项目 688 19.2.1 silverlight应用程序 689 19.2.2 silverlight导航应用程序 689 19.2.3 silverlight类库 690 19.3 silverlight解决方案 691 19.3.1 web应用程序 691 19.3.2 应用程序库缓存 691 19.3.3 silverlight应用程序 692 19.4 控件 695 19.5 给silverlight项目添加项 702 19.5.1 silverlight用户控件 703 19.5.2 silverlight应用程序类 703 19.5.3 silverlight页面 703 19.5.4 silverlight子窗口 703 19.5.5 silverlight模板控件 703 19.5.6 silverlight资源字典 704 19.6 浏览器之外的silverlight 704 19.7 小结 705 第iv部分 internet应用程序技术 第20章 silverlight和服务 709 20.1 服务和silverlight 709 20.1.1 asmx web服务 709 20.1.2 wcf服务 712 20.1.3 ado.net数据服务 716 20.2 model-view-viewmodel 725 20.2.1 分割 725 20.2.2 model 725 20.2.3 view 728 20.2.4 viewmodel 729 20.3 小结 729 第21章 使用asp.net 731 21.1 asp.net的历史 731 21.2 asp.net的重要特性 732 21.2.1 开发效率 732 21.2.2 性能和可伸缩性 732 21.2.3 本地化 732 21.2.4 健康监控 733 21.2.5 易于访问数据 733 21.2.6 管理和维护 733 21.3 visual studio对asp.net 的支持 733 21.3.1 web site和web application项目 733 21.3.2 asp.net应用程序文件夹 734 21.3.3 web服务器选项 735 21.4 用web窗体构建asp.net应用程序 735 21.5 数据驱动的应用程序 746 21.5.1 使用sqldatasource控件绑定数据 746 21.5.2 使用linqdatasource控件绑定数据 754 21.5.3 使用objectdastasource控件绑定数据 757 21.6 小结 759 第22章 asp.net的高级功能 761 22.1 母版页 761 22.1.1 创建母版页 762 22.1.2 创建内容页 765 22.1.3 为母版页提供默认内容 767 22.2 导航 767 22.2.1 使用sitemappath服务器控件 769 22.2.2 menu服务器控件 770 22.3 使用asp.net的提供程序模型 771 22.4 成员和角色管理 776 22.5 配置文件属性 781 22.6 microsoft ajax(asp.net ajax) 783 22.6.1 理解对ajax的需求 783 22.6.2 microsoft ajax 的实现 784 22.6.3 updatepanel控件和客户端服务调用 785 22.6.4 示例项目 785 22.6.5 添加updatepanel控件 789 22.6.6 使用客户端服务调用和客户端模板 790 22.7 小结 795 第23章 asp.net mvc 797 23.1 mvc和asp.net 798 23.2 构建asp.net mvc应用程序 798 23.2.1 创建项目 798 23.2.2 控制器和操作 800 23.2.3 添加模型 802 23.2.4 视图 804 23.2.5 路由 807 23.2.6 搭框架和crud操作 808 23.2.7 验证 815 23.3 小结 817 第24章 sharepoint 2010开发 819 24.1 简介 819 24.1.1 sharepoint foundation 2010 820 24.1.2 sharepoint server 2010 820 24.1.3 sharepoint的术语 820 24.1.4 sharepoint开发环境 821 24.2 feature和solution framework 821 24.2.1 feature 821 24.2.2 solution framework 829 24.3 用于sharepoint开发的visual studio工具 833 24.4 sharepoint 2010对象模型 839 24.4.1 服务器对象模型 840 24.4.2 客户端对象模型 843 24.5 构建web 部件 845 24.6 小结 851 第v部分 库和专业主题技术 第25章 visual studio tools foroffice 855 25.1 vsto的各个版本 856 25.1.1 office的自动化功能和vsto 856 25.1.2 免pia部署 856 25.1.3 vsto项目类型 857 25.2 office业务应用程序的体系结构 858 25.3 使用vba和vsto 859 25.4 创建文档模板(word) 864 25.4.1 给文档添加内容 866 25.4.2 添加ribbon和操作窗格 867 25.4.3 激活操作窗格 870 25.4.4 更新内容控件 872 25.5 创建office插件(excel) 875 25.6 outlook form regions 881 25.7 小结 889 第26章 windows workflow foundation 891 26.1 应用程序中的工作流 891 26.2 建立工作流 892 26.2.1 用windows workflowfoundation添加工作流 892 26.2.2 一个简单的工作流 894 26.2.3 标准活动 897 26.2.4 一个不太简单的工作流 899 26.2.5 建立定制活动 907 26.2.6 动态加载工作流 911 26.3 重新构建工作流设计器 912 26.4 小结 915 第27章 本地化 917 27.1 文化和区域 917 27.1.1 理解文化类型 918 27.1.2 线程 919 27.1.3 在asp.net中声明全局文化 921 27.1.4 在asp.net中使用文化设置 922 27.2 转换数值和操作 923 27.2.1 理解日期之间的区别 923 27.2.2 理解数字和货币的区别 925 27.2.3 理解排序字符串的区别 927 27.3 asp.net资源文件 929 27.3.1 使用本地资源 929 27.3.2 全局资源 933 27.4 windows窗体中的资源文件 935 27.5 小结 938 第28章 与com的交互操作 939 28.1 理解com 940 28.2 com和.net的交互 940 28.2.1 传统的组件 941 28.2.2 .net应用程序 942 28.2.3 调试 945 28.2.4 直接使用tlbimp 945 28.2.5 后期绑定 946 28.3 activex控件 950 28.3.1 传统的activex控件 950 28.3.2 另一个.net应用程序 952 28.3.3 再次调试 954 28.4 在com应用程序中使用.net组件 954 28.4.1 .net组件 954 28.4.2 regasm 956 28.4.3 tlbexp 957 28.5 p/invoke 957 28.6 小结 957 第29章 网络编程 959 29.1 协议、地址和端口 959 29.1.1 地址与计算机名 961 29.1.2 端口:指定应用程序 961 29.1.3 防火墙:不离不弃 962 29.2 system.net名称空间 963 29.2.1 web请求与响应 963 29.2.2 使用webclient简化常用的web请求 969 29.3 套接字 970 29.3.1 构建应用程序 971 29.3.2 创建conversation窗口 973 29.3.3 发送消息 980 29.3.4 关闭应用程序 984 29.4 在应用程序中使用internetexplorer 988 29.5 小结 991 第30章 应用程序服务 993 30.1 给应用程序服务使用iis 993 30.2 windows服务 993 30.3 windows服务的特性 994 30.4 与windows服务交互 995 30.5 创建windows服务 996 30.5.1 用于windows服务的.net framework类 996 30.5.2 其他类型的windows服务 998 30.6 在vb中创建windows服务 998 30.7 创建文件监视器服务 1000 30.7.1 创建windows服务的解决方案 1000 30.7.2 给服务添加.net组件 1000 30.7.3 安装服务 1003 30.7.4 启动服务 1004 30.7.5 卸载服务 1005 30.8 与服务通信 1005 30.8.1 servicecontroller类 1006 30.8.2 把servicecontroller集成到例子中 1007 30.8.3 servicecontroller的更多内容 1008 30.9 定制命令 1008 30.10 给服务传递字符串 1010 30.11 调试服务 1010 30.12 小结 1012 第31章 程序集和反射 1013 31.1 程序集 1013 31.2 清单 1014 31.2.1 程序集标识部分 1016 31.2.2 引用的程序集 1018 31.3 程序集与部署 1018 31.3.1 应用程序私有的程序集 1018 31.3.2 共享程序集 1019 31.4 版本化问题 1020 31.4.1 应用程序隔离 1020 31.4.2 并行执行 1020 31.4.3 自描述 1021 31.4.4 版本策略 1021 31.4.5 配置文件 1022 31.5 反射基础 1025 31.5.1 assembly类 1026 31.5.2 获得当前加载的程序集 1026 31.5.3 type类 1027 31.6 程序集的动态加载 1028 31.6.1 assembly类的loadfrom方法 1028 31.6.2 动态加载示例 1029 31.6.3 传入程序集 1030 31.7 小结 1031 第32章 .net framework中的安全性 1033 32.1 安全的概念与定义 1034 32.2 system.security.permissions名称空间中的权限 1035 32.2.1 代码访问权限 1037 32.2.2 身份权限 1038 32.2.3 基于角色的权限 1038 32.3 管理代码访问权限集合 1041 32.4 用户访问控制 1043 32.5 定义应用程序的uac设置 1043 32.5.1 安全性工具 1045 32.5.2 使用securityexception类处理异常 1046 32.6 加密基础 1047 32.7 小结 1060 第33章 使用任务和线程进行并行编程 1061 33.1 启动并行任务 1061 33.1.1 system.threading.tasks.parallel类 1062 33.1.2 parallel.invoke 1062 33.2 把串行代码转换为并行代码 1066 33.2.1 检测热点 1067 33.2.2 测试并行执行获得的速度提升 1069 33.2.3 理解并行和并发执行 1070 33.3 并行循环 1071 33.3.1 parallel.for 1071 33.3.2 parallel.foreach 1076 33.3.3 退出并行循环 1081 33.4 指定希望的并行度 1086 33.4.1 paralleloptions 1086 33.4.2 理解硬件线程和逻辑核心 1087 33.5 创建和管理任务 1088 33.5.1 system.threading.tasks.task 1089 33.5.2 理解任务的生命周期 1090 33.5.3 使用任务并行化代码 1091 33.5.4 从任务中返回值 1099 33.5.5 为并发和并行准备代码 1102 33.5.6 理解并发集合特性 1103 33.5.7 把linq转换为plinq 1106 33.6 小结 1108 第34章 部署 1109 34.1 应用程序部署 1110 34.1.1 .net中的部署很简单 1110 34.1.2 xcopy部署 1110 34.1.3 使用windows installer 1110 34.1.4 clickonce部署 1111 34.2 选择framework版本 1111 34.3 visual studio部署项目 1112 34.3.1 项目模板 1112 34.3.2 创建部署项目 1113 34.4 修改部署项目 1117 34.4.1 项目属性 1117 34.4.2 file system编辑器 1119 34.4.3 registry编辑器 1122 34.4.4 file types编辑器 1124 34.4.5 user interface编辑器 1125 34.4.6 custom actions编辑器 1127 34.4.7 launch conditions编辑器 1129 34.4.8 构建 1132 34.5 windows应用程序的internet部署 1132 34.5.1 “无接触”部署 1132 34.5.2 clickonce部署 1133 34.6 iis web部署工具 1140 34.7 小结 1142 第vi部分 附 录 附录 a vb编译器 1145 附录 b visual basic powerpacks tools 1161 附录 c workflow 2008 1173 附录 d 企业服务 1193 附录 e 云的编程 1215

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧