WPF 经典入门教程


本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 目录 WPF 体系结构 .......................................................................................................................................................... 3 WPF 应用程序管理 .................................................................................................................................................. 5 一、WPF 应用程序由 System.Windows.Application 类进行管理 ................................................................. 5 二、创建 WPF 应用程序 ................................................................................................................................. 5 三、应用程序关闭 ........................................................................................................................................... 6 四、Application 对象的事件 ........................................................................................................................... 7 五、WPF 应用程序生存周期 .......................................................................................................................... 9 WPF 窗体 ................................................................................................................................................................ 10 一、窗体类 ..................................................................................................................................................... 10 1、XAML 文件....................................................................................................................................... 10 2、后台代码文件 ................................................................................................................................... 10 二、窗体的生存周期 ......................................................................................................................................11 1、显示窗体 ............................................................................................................................................11 2、关闭窗体 ........................................................................................................................................... 12 3、窗体的激活 ....................................................................................................................................... 12 4、窗体的生存周期 ............................................................................................................................... 12 三、其他窗体相关的属性、方法、事件 ..................................................................................................... 15 四、定义异形窗体 ......................................................................................................................................... 16 StackPanel、WrapPanel、DockPanel 容器 .......................................................................................................... 19 一、StackPanel ............................................................................................................................................... 19 1、可以使用 Orientation 属性更改堆叠的顺序 ................................................................................... 19 2、设置控件的属性,调整控件的显示................................................................................................ 20 二、WrapPanel ................................................................................................................................................ 20 三、DockPanel ................................................................................................................................................ 21 Grid UniformGrid 容器 ........................................................................................................................................ 22 一、Grid .......................................................................................................................................................... 22 二、使用 GridSplit 分割 ................................................................................................................................ 23 三、UniformGrid ............................................................................................................................................ 25 Canvas、InkCanvas 布局 ....................................................................................................................................... 27 一、Canvas ..................................................................................................................................................... 27 二、InkCanvas ................................................................................................................................................ 27 WPF 对控件其类型的继承方式如下 .................................................................................................................... 29 WPF 控件内容模型 ................................................................................................................................................ 32 一、ContentControl 模型 ............................................................................................................................... 35 二、HeaderedContentControl 模型 ................................................................................................................ 36 三、ItemsControl 模型 ................................................................................................................................... 38 1、使用 ItemSource 属性 ....................................................................................................................... 38 2、使用 Items 属性 ................................................................................................................................ 40 四、HeaderedItemsControl 模型 .................................................................................................................... 42 Panel Decorator TextBlock 内容模型 .................................................................................................................. 44 一、Panel 内容模型 ....................................................................................................................................... 44 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 二、Decorator 内容模型 ................................................................................................................................ 45 三、TextBlock 模型 ........................................................................................................................................ 46 四、TextBox 模型 ........................................................................................................................................... 49 依赖项属性和路由事件 ......................................................................................................................................... 50 一、依赖项属性(Dependency Property ....................................................................................................... 50 1、依赖项属性与 CLR 包装属性 ......................................................................................................... 50 2、使用由依赖项属性提供的属性功能................................................................................................ 51 3、自定义依赖项属性及重写依赖项属性 ............................................................................................ 52 二、路由事件(RoutedEvent)..................................................................................................................... 53 键盘输入、鼠标输入、焦点处理 ......................................................................................................................... 56 一、键盘类和键盘事件 ................................................................................................................................. 56 二、鼠标类和鼠标事件 ................................................................................................................................. 57 三、焦点处理 ................................................................................................................................................. 60 1、键盘焦点: ....................................................................................................................................... 60 2、逻辑焦点 ........................................................................................................................................... 61 3、键盘导航 ........................................................................................................................................... 61 4、焦点事件 ........................................................................................................................................... 61 WPF 命令 ................................................................................................................................................................ 63 一、命令: ..................................................................................................................................................... 64 二、命令源 ..................................................................................................................................................... 65 三、命令目标 ................................................................................................................................................. 66 四、命令绑定 ................................................................................................................................................. 67 WPF 资源 ................................................................................................................................................................ 70 一、什么是资源 ............................................................................................................................................. 70 二、资源的定义及 XAML 中引用 ................................................................................................................ 70 三、XAML 解析资源的顺序 ......................................................................................................................... 74 四、静态资源(StaticResource)和动态资源(DynamicResource) ........................................................ 77 五、不同类型的资源 ..................................................................................................................................... 81 1、程序集资源。 ................................................................................................................................... 81 2、对象资源 ........................................................................................................................................... 82 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com WPF 体系结构 WPF 的基础的体系结构,所引用的 Assembly 如下图所示: 关系图中的 PresentationFramework、PresentationCore 和 milcore 是 WPF 的主要 代码部分。在这些组件中,只有一个是非托管组件 – milcore。milcore 是以非托管代码编 写的,目的是实现与 DirectX 的紧密集成。WPF 中的所有显示是通过 DirectX 引擎完成 的,可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中 的组合引擎受性能影响关系大,需要放弃 CLR 的许多优点来提高性能。 在 WPF 中常用的的控件类继承结构如下图所示: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com System.Object 类:在.Net 中所有类型的根类型 System.Windows.Threading.DispatcherObject 类:WPF 中的大多数对象是从 Dispa tcherObject 派生的,这提供了用于处理并发和线程的基本构造。WPF 基于调度程序实现 的消息系统。 System.Windows.DependencyObject 类:表示一个参与依赖项属性系统的对象。 System.Windows.Media.Visual 类:为 WPF 中的呈现提供支持,其中包括命中测试、坐 标转换和边界框计算。 System.Windows.UIElement 类:UIElement 是 WPF 核心级实现的基类,该类建立在 Windows Presentation Foundation (WPF) 元素和基本表示特征基础上。 System.Windows.FrameworkElement 类:为 Windows Presentation Foundation (WPF) 元素提供 WPF 框架级属性集、事件集和方法集。此类表示附带的 WPF 框架级实 现,它是基于由 UIElement 定义的 WPF 核心级 API 构建的。 System.Windows.Controls.Control 类:表示 用户界面 (UI) 元素的基类,这些元素使 用 ControlTemplate 来定义其外观。 System.Windows.Controls.ContentControl 类:表示包含单项内容的控件。 System.Windows.Controls.ItemsControl 类:表示一个可用于呈现项的集合的控件。 System.Windows.Controls.Decorator 类:提供在单个子元素(如 Border 或 Viewbo x)上或周围应用效果的元素的基类。 System.Windows.Controls.Image 类:表示显示图像的控件。 System.Windows.Controls.MediaElement 类:表示包含音频和/或视频的控件。 System.Windows.Controls.Panel 类:为所有 Panel 元素提供基类。使用 Panel 元素 在 Windows Presentation Foundation (WPF) 应用程序中放置和排列子对象。 System.Windows.Sharps.Sharp 类:为 Ellipse、Polygon 和 Rectangle 之类的形状 元素提供基类。 详细的有关 WPF 的控件类及其使用请参考 MSDN 文档。 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com WPF 应用程序管理 一、WPF 应用程序由 System.Windows.Application 类进行管理 无内容. 二、创建 WPF 应用程序 创建 WPF 应用程序有两种方式: 1、Visual Studio 和 Expression Blend 默认的方式,使用 App.xaml 文件定义启动应用 程序 App.xaml 文件的内容大致如下: 1: 5: 6: 7: 其中 StartupUri 指定启动的 WPF 窗体 2、可以自已定义类,定义 Main 方法实现对 WPF 应用程序的启动 在项目中添加一个类,类的代码如下,在项目选项中,设定此类为启动项。 1: using System; 2: using System.Windows; 3: 4: namespace WpfApplicationLifeCycle 5: { 6: public class MainClass 7: { 8: [STAThread] 9: static void Main() 10: { 11: // 定义 Application 对象 12: Application app = new Application(); 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 13: 14: // 方法一:调用 Run 方法,参数为启动的窗体对象 15: Window2 win = new Window2(); 16: app.Run(win); 17: 18: // 方法二:指定Application对象的MainWindow属性为启动窗体, 调用无参数的 Run 方法 19: //Window2 win = new Window2(); 20: //app.MainWindow = win; 21: //win.Show(); // 此处必须有 win.Show(),否则不能 显示窗体 22: //app.Run(); 23: 24: // 方法三: 25: //app.StartupUri = new Uri("Window2.xaml", UriKind.R elative); 26: //app.Run(); 27: } 28: } 29: } 三、应用程序关闭 应用程序关闭时的策略由 ShutdownMode 属性指定,其类型为 System.Window s.ShutdownMode 枚举类型,其枚举成员有: OnLastWindowClose(默认值):当应用程序中的最后一个窗体关闭时或调用 Applic ation 对象的 Shutdown()方法时,应用程序关闭; OnMainWindowClose:当主窗体(即启动窗体)关闭时或调用 Application 对象的 S hutdown()方法时,应用程序关闭。(类似于 C#的 Windows 应用程序的关闭模式); OnExplicitShutdown:只有在调用 Application 对象的 Shutdown()方法时,应用 程序才会关闭; 更改的时候,可以直接在 App.xaml 中更改: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 1: 6: 7: 8: 也可以在代码文件(App.xaml.cs)中更改 1: Application app = new Application(); 2: Window2 win = new Window2(); 3: 4: // 更改关闭模式必须要在调用 app.Run()方法之前 5: app.ShutdownMode = ShutdownMode.OnExplicitShutdown; 6: app.Run(win); 四、Application 对象的事件 名称 说明 Activated 当应用程序成为前台应用程序时发生。 Deactivated 当应用程序停止作为前台应用程序时发生。 DispatcherUnhandledException 在异常由应用程序引发但未进行处理时发生。 Exit 恰好在应用程序关闭之前发生,且无法取消。 FragmentNavigation 当应用程序中的导航器开始导航至某个内容片断时发生, 如果所需片段位于当前内容中,则导航会立即发生;或者, 如果所需片段位于不同内容中,则导航会在加载了源 XAML 内容之后发生。 LoadCompleted 在已经加载、分析并开始呈现应用程序中的导航器导航到 的内容时发生。 Navigated 在已经找到应用程序中的导航器要导航到的内容时发生, 尽管此时该内容可能尚未完成加载。 Navigating 在应用程序中的导航器请求新导航时发生。 NavigationFailed 在应用程序中的导航器在导航到所请求内容时出现错误 的情况下发生。 NavigationProgress 在由应用程序中的导航器管理的下载过程中定期发生,以 提供导航进度信息。 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com NavigationStopped 在调用应用程序中的导航器的 StopLoading 方法时发 生,或者当导航器在当前导航正在进行期间请求了一个新 导航时发生。 SessionEnding 在用户通过注销或关闭操作系统而结束 Windows 会话 时发生。 Startup 在调用 Application 对象的 Run 方法时发生。 应用程序的事件处理可以: 1、在 App.xaml 中做事件的绑定,在 App.xaml.cs 文件中添加事件的处理方法 在 App.xaml 文件中: 1: 6: 7: 8: 在 App.xaml.cs 文件中: 1: using System.Windows; 2: 3: namespace WpfApplicationLifeCycle 4: { 5: /// 6: /// Interaction logic for App.xaml 7: /// 8: public partial class App : Application 9: { 10: private void Application_Startup(object sender, Startup EventArgs e) 11: { 12: // 定义应用程序启动时要处理的内容 13: } 14: } 15: } 2、在自定义的类中可以做正常的 C#的事件绑定: 1: [STAThread] 2: static void Main() 3: { 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 4: // 定义 Application 对象 5: Application app = new Application(); 6: Window2 win = new Window2(); 7: 8: // 添加事件的绑定 9: app.Startup += new StartupEventHandler(app_Startup); 10: 11: app.Run(win); 12: } 13: 14: static void app_Startup(object sender, StartupEventArgs e) 15: { 16: Window2 win = new Window2(); win.Show(); win.button1.Content = "YOU!"; 17: } 主窗体载入时,会在 Window2 里面定义的 button1 上面就会显示 YOU! 五、WPF 应用程序生存周期 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com WPF 窗体 一、窗体类 在 Visual Studio 和 Expression Blend 中,自定义的窗体均继承 System.Win dows.Window 类(类型化窗体)。定义的窗体由两部分组成: 1、XAML 文件 1: 8: 9: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 53: 54: 代码文件: 1: using System.Windows; 2: using System.Windows.Input; 3: 4: namespace WpfWindow 5: { 6: public partial class CustomerWindow : Window 7: { 8: public CustomerWindow() 9: { 10: InitializeComponent(); 11: } 12: 13: void NonRectangularWindow_MouseLeftButtonDown(object se nder, MouseButtonEventArgs e) 14: { 15: this.DragMove(); 16: } 17: 18: void closeButtonRectangle_Click(object sender, RoutedEv entArgs e) 19: { 20: this.Close(); 21: } 22: } 23: } 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com StackPanel、WrapPanel、DockPanel 容器 一、StackPanel StackPanel 是以堆叠的方式显示其中的控件 1、可以使用 Orientation 属性更改堆叠的顺序 Orientation="Vertical" 默认,由上到下显示各控件。控件在未定义的前提下,宽度为 StackPanel 的宽度,高 度自动适应控件中内容的高度 1: 2: 3: 4: 5: 6: 7: 8: Orientation="Horizontal" 由左到右显示各控件。控件在未定义的前提下,高度为 StackPanel 的高度,宽度自动 适应控件中内容的宽度 1: 2: 3: 4: 5: 6: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 7: 8: 2、设置控件的属性,调整控件的显示 Margin 属性 定义控件的外边缘,可以通过以下几种方式来设置 1)Margin=”10”:各边缘均为 10 2)Margin=”10,20,30,40”:设定左、上、右、下各边缘分别为 10、20、30、40 3)使用拆分式方式设定,如上下为 10,左右为 20 1: Width、Height 属性 设定控件的宽度和高度,取消自动的宽度和高度 HorizontalAlignment、VerticalAlignment 属性 设定控件的水平或竖直对齐方式,如整体 Orientation="Vertical"的前提下,设置水 平对齐为 Left、Right 或 Center,在没有设定宽度的情况下,控件的宽度自动调整 MinWidth、MinHeight、MaxWidth、MaxHeight 属性 在调整窗体大小,同时更改控件大小时,控件宽度、高度可变化的最大值和最小值 二、WrapPanel 以流的形式由左到右,由上到下显示控件,其功能类似于 Java AWT 布局中的 FlowLayout 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 三、DockPanel 以上、下、左、右、中为基本结构的布局方式,类似于 Java AWT 布局中的 BorderLayout。 但与 BorderLayout 不同的是,每一个区域可以同时放置多个控件,在同一区域放置的多个 控件采用的布局方式为 StackPanel 方式。 如: 1: 2: 11: 12: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 13: 14: 二、使用 GridSplit 分割 可以使用 GridSplit 控件结合 Grid 控件实现类似于 Windows 应用程序中 SplitContai ner 的功能,如下面的应用程序: 要实现以下的功能: ButtonA 和 ButtonB、ButtonC 组成的整体,可以左右拖动,改变两者的宽度 ButtonB 和 ButtonC 可以上下拖动,改变两者的高度 实现以上功能的 XAML 代码如下: 1: 2: 3: 4: 5: 6: 7: 8: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 9: 10: 11: 12: 13: 3: 4: 5: 6: 在调整窗体大小时,LT 与左、上距离保持不变;RT 与右、上距离保持不变;LB 与左、下距 离保持不变;RB 与右、下距离保持不变。使用 Canvas 不能简单地实现 Windows 应用程 序中 Acho 的功能。 二、InkCanvas 在 WPF 中实现允许使用墨迹的控件。如: 1: 5: 6: 7: 8: 9: 11: 12: 其他的功能与 Canvas 相近。 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com WPF 对控件其类型的继承方式如下 (其中绿色表示的类是抽象类,蓝色表示的类是非抽象类) 控件内容模型 System.Windows.Controls.Control 类:表示 用户界面 (UI) 元素的基类,这些元素使用 ControlTemplate 来定义其外观 ContentControl:ContentControl 是一种包含一段内容的 Control 说明 ContentControl 是一种包含一段内容的 Control。 内容属性 Content 内容模型信息 控件内容模型概述 属于此类型系列的类 型 Button, ButtonBase, CheckBox, ComboBoxItem, ContentControl, Frame, GridViewColumnHeader, GroupItem, Label, ListBoxItem, ListViewItem, NavigationWindow, RadioButton, RepeatButton, ScrollViewer, StatusBarItem, ToggleButton, ToolTip, UserControl, Window 可包含 ContentControl 类 型的类型 ContentControl 类、HeaderedContentControl 类、ItemsControl 类、 HeaderedItemsControl 类、Panel 类、Decorator 类和 Adorner 类 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 子类别 HeaderedContentControl 类 HeaderedContentControl:包含一段内容并具有 Header 的 ContentControl 说明 HeaderedContentControl 是一种包含一段内容并具有 Header 的 ContentControl。 内容属性 Content, Header 内容模型信息 控件内容模型概述 属于此类型系列的类型 Expander, GroupBox, HeaderedContentControl, TabItem 可包含 HeaderedContentControl 类型的类型 ContentControl 类、HeaderedContentControl 类、ItemsControl 类、 HeaderedItemsControl 类、Panel 类、Decorator 类和 Adorner 类 ItemsControl:可包含多个项目(例如字符串、对象或其他元素)的 Control 说明 ItemsControl 是一种可包含多个项目(例如字符串、对象或其他元素)的 Control。 内容属性 Items, ItemsSource 主内容类型 多个项目,可以是字符串、对象或其他元素。 内容模型信息 控件内容模型概述 属于此类型系列的类型 Menu, MenuBase, ContextMenu, ComboBox, ItemsControl, ListBox, ListView, TabControl, TreeView, Selector, StatusBar 可包含 ItemsControl 类型的类型 ContentControl 类、HeaderedContentControl 类、ItemsControl 类、 HeaderedItemsControl 类、Panel 类、Decorator 类和 Adorner 类 子类别 HeaderedItemsControl 类 HeaderedItemsControl:可包含多个项目(例如字符串、对象或其他元素)并具有标题的 ItemsCo ntrol 说明 HeaderedItemsControl 是一种 ItemsControl,可包含多个项目(例如字符串、对 象或其他元素)并具有标题。 内容属性 Header, Items, ItemsSource 内容模型信息 控件内容模型概述 属于此类型系列的类型 HeaderedItemsControl, MenuItem, TreeViewItem, ToolBar 可包含 HeaderedItemsControl 通常,MenuItem 对象用作 Menu 元素的子元素;TreeViewItem 对象用作 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 类型的类型 TreeView 元素的子元素;ToolBar 对象用作 ToolBarTray 的子元素。 Panel 内容模型 System.Windows.Controls.Panel 抽象类:为所有 Panel 元素提供基类。使用 Panel 元素在 Windows Presentation Foundation (WPF) 应用程序中放置和排列子对象。 说明 Panel 是一种 FrameworkElement,它用于定位和排列子对象。 内容属性 Children 主内容类型 一个或多个 UIElement 对象。 内容模型信息 Panel 内容模型概述 属于此类型系列 的类型 Canvas, DockPanel, Grid, TabPanel, ToolBarOverflowPanel, StackPanel, ToolBarPanel, UniformGrid, VirtualizingPanel, VirtualizingStackPanel, WrapPanel 可包含 Panel 类型的类型 ContentControl 类、HeaderedContentControl 类、ItemsControl 类、HeaderedItemsControl 类、 Panel 类、Decorator 类和 Adorner 类 Sharp 模型 System.Windows.Sharps.Sharp 抽象类:为 Ellipse、Polygon 和 Rectangle 之类的 形状元素提供基类 Decorator 模型 System.Windows.Controls.Decorator 类:提供在单个子元素(如 Border 或 Viewb ox)上或周围应用效果的元素的基类 说明 Decorator 是一种 FrameworkElement,它将效果应用于单一子 UIElement 之上或周围。 内容属性 Child 主内容类型 单一 UIElement 内容模型信息 Decorator 内容模型概述 属于此类型系列的类 型 ButtonChrome, ClassicBorderDecorator, ListBoxChrome, SystemDropShadowChrome, Border, InkPresenter, BulletDecorator, Viewbox, AdornerDecorator 可包含 Decorator 类型的类型 ContentControl 类、HeaderedContentControl 类、ItemsControl 类、HeaderedItemsControl 类、Panel 类、Decorator 类和 Adorner 类 TextBox 和 TextBlock 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com WPF 控件内容模型 WPF控件内容模型主要指派生于 System.Windows.Controls.Control 类的各种控件, 其主要分为四部分: ContentControl HeaderedContendControl ItemsControl HeaderedItemsControl 这四个类用作为 WPF 中大多数控件的基类。使用这些内容模型的类可以包含相同类型的内 容,并以相同的方式处理该内容;可以放置在某个 ContentControl(或从 ContentContr ol 继承的类)中的任何类型的对象都可以放置在具有其他三个内容模型中的任何一个的控件 中。如: 1: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 7: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 8: 9: 12: 13: 14: 5: 6: 7: 8: 9: 10: 也可以通过代码,动态添加 Children 中的对象 1: // 定义一个 Button 2: Button btn = new Button(); 3: btn.Content = "Button C"; 4: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 5: // 将 Button 添加到 StackPanel 中 6: panelB.Children.Add(btn); 二、Decorator 内容模型 Decorator 内容模型指的是从 System.Windows.Controls.Decorator 类继承的控件,主 要是对其中的一个子元素的边缘进行修饰。Decorator 模型的主要控件包含: AdornerDecorator Border InlineUIContainer BulletDecorator ButtonChrome ClassicBorderDecorator InkPresenter ListBoxChrome SystemDropShadowChrome Viewbox Decorator 模型包含一个 Child 属性,表示其包含的一个子元素(注意,只能是一个子元素 (控件或容器,在容器中可以再添加其他的控件)),Child 属性的 XAML 标记可以省略。 例如,对于一个 TextBox 添加一个边框,使用 XAML 语言定义: 1: 2: 3: 4: 5: 6: 7: 也可以使用代码完成上述功能: 1: // 定义一个 Border 对象,并设置其边框的大小,颜色,外边距 2: Border border = new Border(); 3: border.BorderThickness = new Thickness(5); 4: border.BorderBrush = new SolidColorBrush(Colors.DarkRed); 5: border.Margin = new Thickness(5); 6: 7: // 定义一个 TextBox 对象 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 8: TextBox textBox = new TextBox(); 9: textBox.Text = "TextBox Content Text"; 10: 11: // 使用 Border 修饰 TextBox 的边框 12: border.Child = textBox; 13: 14: // 将 Border 添加到 StackPanel 中 15: mainPanel.Children.Add(border); 三、TextBlock 模型 TextBlock 模型实际上指的就是 System.Windows.Controls.TextBlock 类,它是 一个用于显示少量流内容的轻量控件。其中包含一个 InLines 属性,支持 Inline 流内容 元素的承载和显示。 支持的元素包括 AnchoredBlock、Bold(粗体字符串)、Hyperlink (超链接,在浏览器支持的模式下有效)、InlineUIContainer(承载其他控件的容器)、I talic(斜体字符串)、LineBreak(换行符)、Run(普通字符串)、Span(可以设置字体、 颜色等的 Span) 和 Underline(下划线)。 例如: 1: 2: 3: 4: 5: 6: BlockText 控件 XAML 示例 7: 8: 9: TextBlock 支持以下的几种流显示样式: 10: 11: 粗体(Bold) 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 12: 13: 斜体(Italic) 14: 15: 下划线(Underline) 16: 17: 超链接 18: 19: Span 设置字体、 颜色等 20: 21: 22: 23: Inline UI 容器 24: 16: 17: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 18: 7: 8: 2 窗体级资源 定义在 Window 或 Page 中,作为一个窗体或页面共享的资源存在 1: 5: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 6: 7: 8: 9: 10: 11: 3 文件级资源 定义在资源字典的 XAML 文件中,再引用 在 Visual Studio 的 WPF 应用程序项目中, 添加“资源字典(Resource Dictionary)”类型的项 在其 XAML 文件中定义: 1: 3: 4: 在 FileResourceDemo.xaml 文件(窗体)中,将其注册为窗体级的资源,并引用 1: 5: 6: 7: 8: 9: 10: 11: 4 对象(控件)级资源 定义在某个 ContentControl 中,作为其子容器、子控件共享的资源 在 Button 中定义 一个资源,供 Button 内的 Content 控件使用 1: 5: 6: 14: 15: 三、XAML 解析资源的顺序 在 XAML 中解析资源按照由引用资源的控件向外层容器依次调用资源。例如在在应用程 序级别、窗体级别及对象级别分为定义 x:Key 相的同资源: 在 App.xaml 文件中: 1: 5: 6: 7: 8: 9: 10: 在窗体的 XAML 文件中: 1: 5: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 6: 7: 8: 9: 10: 11: 12: 16: 23: 24: 1: private void Button_Click(object sender, RoutedEventArgs e) 2: { 3: SolidColorBrush brush = new SolidColorBrush(Colors.Green); 4: this.Resources["ButtonBrush"] = brush; 5: } 以上的例子在运行时显示如下: 而点击“Change Button Resource”按钮后,显示的结果为: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 从程序执行的结果来看,我们可以得到如下的结论: 静态资源引用是从控件所在的容器开始依次向上查找的,而动态资源的引用是从控件开 始向上查找的(即控件的资源覆盖其父容器的同名资源) 更改资源时,动态引用的控件样式发生变化(即"Dynamic Resource Button A"发生 变化) 如果要更改"Dynamic Resource Button B"的背景,需要在按钮的事件中添加以下代码(将 "Dynamic Resource Button B"的控件的 x:Name 设置为"btn4") 1: SolidColorBrush brushB = new SolidColorBrush(Colors.Blue); 2: this.btn4.Resources["ButtonBrush"] = brushB; 执行的结果如下: 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 静态资源引用最适合于以下情况: 您的应用程序设计几乎将所有的应用程序资源集中到页或应用程序级别的资源字典中。 静态资源引用不会基于运行时行为(例如重新加载页)进行重新求值,因此,根据您的资源 和应用程序设计避免大量不必要的动态资源引用,这样可以提高性能。 您正在设置不在 DependencyObject 或 Freezable 上的属性的值。 您正在创建将编译为 DLL 并打包为应用程序的一部分或在应用程序之间共享的资源字 典。 您正在为自定义控件创建一个主题,并定义在主题中使用的资源。对于这种情况,通常 不需要动态资源引用查找行为,而需要静态资源引用行为,以使该查找可预测并且独立于该 主题。使用动态资源引用时,即使是主题中的引用也会直到运行时才进行求值,并且在应用 主题时,某个本地元素有可能会重新定义您的主题试图引用的键,并且本地元素在查找中会 位于主题本身之前。如果发生该情况,主题将不会按预期方式运行。 您正在使用资源来设置大量依赖项属性。依赖项属性具有由属性系统启用的有效值缓存 功能,因此,如果您为可以在加载时求值的依赖项属性提供值,该依赖项属性将不必查看重 新求值的表达式,并且可以返回最后一个有效值。该方法具有性能优势。 您需要为所有使用者更改基础资源,或者需要通过使用 x:Shared 属性为每个使用者维 护独立的可写实例。 动态资源最适合于以下情况: 资源的值取决于直到运行时才知道的情况。这包括系统资源,或用户可设置的资源。例 如,您可以创建引用由 SystemColors、SystemFonts 或 SystemParameters 公开的 系统属性的 setter 值。这些值是真正动态的,因为它们最终来自于用户和操作系统的运行 时环境。您还可以使用可以更改的应用程序级别的主题,在此情况下,页级别的资源访问还 必须捕获更改。您正在为自定义控件创建或引用主题样式。您希望在应用程序生存期调整 ResourceDictionary 的内容。您有一个存在依存关系的复杂资源结构,在这种情况下,可 能需要前向引用。静态资源引用不支持前向引用,但动态资源引用支持,因为资源直到运行 时才需要进行求值,因此,前向引用不是一个相关概念。 从编译或工作集角度来说,您引用的资源特别大,并且加载页时可能无法立即使用该资 源。静态资源引用始终在加载页时从 XAML 加载;而动态资源引用直到实际使用时才会加 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 载。您要创建的样式的 setter 值可能来自受主题或其他用户设置影响的其他值。您正在将 资源应用到元素,而在应用程序生存期中可能会在逻辑树中重新设置该元素的父级。更改此 父级还可能会更改资源查找范围,因此,如果您希望基于新范围对重新设置了父级的元素的 资源进行重新求值,请始终使用动态资源引用。 五、不同类型的资源 1、程序集资源。 这种常见于将图片设定到程序集中,做为程序集的资源。 程序集资源在定义时,将文件复制到解决方案-项目所在的目录或其子目录中,并将文件的属 性中的 Build Action 设置为 Resource。(注意,WPF 不支持项目属性中的资源) 然后在 XAML 文件中使用如 Image 的 Source 属性,指定到此文件: 1: 2: 3: 4: 12: 此项目编译后,在 Assembly 中将封装该图片文件。此种方法适用于较小的资源。 2、对象资源 除刚刚我们使用的图片做为程序集资源外,前面例子中所使用的资源均是对象资源。系统对 于对象资源使用 ResouceDictionary 这个字典集合处理,其 Key 对应即 x:Key 声明的键, Value 对应资源。我们前面使用的都是 SolidColorBrush 对象,再例如使用字符串及 ImageBrush 对象做为资源: 1: 2: 3: My String Value. 4: 6: 7: 8: 9:
还剩82页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

q214660670

贡献于2015-10-15

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf