尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

c#软件开发学习笔记--WPF(控件、样式)

c#软件开发学习笔记--WPF(控件、样式) WPF 学习总结一、WPF 基础概念1.1 什么是 WPFWPF (Windows Presentation Foundation)微软推出的基于 .NET Framework 的桌面客户端 UI 框架。使用XAML标记语言来定义界面实现UI 与逻辑分离。应用程序结构Application→Window/NavigationWindow→Page/ 控件。1.2 WPF 编译原理.xaml文件编译为.baml二进制资源文件再嵌入到程序集生成的二进制文件中。.xaml.csCode-Behind 代码隐藏文件编译为普通的.cs二进制代码。二、XAML 语法2.1 XAML 概述XAMLExtensible Application Markup Language是一种声明性标记语言类似 HTML/XML。.xaml文件本质上是 XML 文件区分大小写。2.2 常用命名空间命名空间前缀用途http://schemas.microsoft.com/winfx/2006/xaml/presentation默认WPF 核心控件/元素http://schemas.microsoft.com/winfx/2006/xamlx:XAML 基础关键字x:Class,x:Name,x:Key,x:Array,x:Static等http://schemas.microsoft.com/expression/blend/2008d:设计时预览属性仅在 VS/Blend 中生效运行时忽略http://schemas.openxmlformats.org/markup-compatibility/2006mc:标记兼容性配合mc:Ignorabled告知编译器忽略d:前缀clr-namespace:项目名local:引用当前项目的 CLR 命名空间2.3 XAML 语法要点标签本质是一个类对象WPF 中称为元素或控件。标签类型双标签非空标签闭合标签、单标签空标签。属性只出现在开始标签中以键值对形式存在官方称为特性语法。内容区开始标签和结束标签之间的信息可以包含文本或子标签。附加属性标签本身没有的属性由其他标签附加而来如Grid.Row、Grid.Column、DockPanel.Dock。标记扩展使用{}语法如{StaticResource key}、{Binding Path}。2.4 实体字符实体字符含义lt;小于号gt;大于号#160;空格#165;人民币符号#169;版权符号©#174;注册商标符号®三、App.xaml 与窗体启动方式3.1 三种启动方式方式一StartupUri 属性推荐ApplicationStartupUriMainWindow.xaml最简单、最常用的方式不能传递参数。方式二Startup 事件推荐ApplicationStartupApplication_StartupprivatevoidApplication_Startup(objectsender,StartupEventArgse){this.ShutdownModeShutdownMode.OnExplicitShutdown;Window1w1newWindow1(100);w1.ShowDialog();this.ShutdownModeShutdownMode.OnMainWindowClose;}可以传递参数灵活性更高。方式三自定义 Main 方法不推荐[STAThread]publicstaticvoidMain(string[]args){ApplicationappnewApplication();app.StartupUrinewUri(Window1.xaml,UriKind.Relative);app.Run();}需要在 App.xaml 中设置生成操作为无避免多个入口函数。必须加[STAThread]线程安全特性。3.2 窗体显示方式ShowDialog()模态窗口阻塞式Show()非模态窗口app.Run(win)指定主窗口运行app.MainWindow win; win.Show(); app.Run()先设置主窗口再运行四、布局控件4.1 Grid网格布局最常用的布局容器支持行列定义。定义列Grid.ColumnDefinitionsColumnDefinition定义行Grid.RowDefinitionsRowDefinition单元格合并Grid.RowSpan、Grid.ColumnSpan列宽可以使用*比例关系如2*、3*。GridGrid.ColumnDefinitionsColumnDefinitionWidth*/ColumnDefinitionWidth2*//Grid.ColumnDefinitionsGrid.RowDefinitionsRowDefinition/RowDefinition//Grid.RowDefinitions!-- 控件放置 --ButtonGrid.Row0Grid.Column0Content按钮//Grid4.2 StackPanel堆叠面板子元素按水平或垂直方向依次排列默认垂直。适用于简单的线性布局。4.3 WrapPanel自动换行面板子元素水平排列超出宽度自动换行。4.4 DockPanel停靠面板子元素可以停靠在上、下、左、右四个方向。最后一个子元素默认填充剩余空间。DockPanelButtonDockPanel.DockTopContent上/ButtonDockPanel.DockBottomContent下/ButtonDockPanel.DockLeftContent左/ButtonDockPanel.DockRightContent右/StackPanelBackgroundOrange/!-- 填充剩余空间 --/DockPanel4.5 Border边框用于为子元素添加边框和背景。常用属性BorderBrush、BorderThickness、CornerRadius圆角、Background。五、样式Style5.1 三种样式级别优先级从高到低行内样式直接在控件标签上设置属性局部样式定义在Window.Resources中仅当前窗体有效全局样式定义在Application.Resources中整个应用程序有效5.2 样式语法Stylex:KeybuttonStyle1TargetTypeButtonSetter PropertyBackgroundValueRed/ Setter PropertyForegroundValueGreen/ Setter PropertyWidthValue100/ Setter PropertyHeightValue100//Style5.3 样式继承BasedOn通过BasedOn{StaticResource BaseStyle}继承基础样式。Stylex:KeyBaseStyleTargetTypeControlSetter PropertyWidthValue120/ Setter PropertyHeightValue30//StyleStylex:KeyTextBoxStyle1BasedOn{StaticResource BaseStyle}TargetTypeTextBoxSetter PropertyGrid.RowValue0/ Setter PropertyGrid.ColumnValue1//Style5.4 使用样式ButtonStyle{StaticResource buttonStyle1}Content按钮/六、资源Resources6.1 资源字典ResourceDictionary用于存储可重用的样式、模板、数据等。定义在Application.Resources或Window.Resources中。6.2 合并资源字典Application.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionarySource/Resources/Dictionary1.xaml/ResourceDictionarySource/Resources/Dictionary2.xaml//ResourceDictionary.MergedDictionaries/ResourceDictionary/Application.Resources6.3 资源字典文件示例!-- Dictionary1.xaml --ResourceDictionaryxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlStylex:KeyLabelStyleTargetTypeLabelSetter PropertyContentValue_Account/ Setter PropertyTargetValue{Binding ElementName txtAccount}//Style/ResourceDictionary6.4 快捷键设置Label 的 Target 属性_Account中的下划线表示快捷键为Alt A。Target{Binding ElementName txtAccount}将焦点定位到对应的输入控件。七、常用控件7.1 内容控件控件说明示例Button按钮Button Content点击 ClickButton_Click/Label标签支持快捷键Label Content_Account/TextBlock文本块轻量级TextBlock文本内容/TextBlock7.2 输入控件控件说明TextBox文本框PasswordBox密码框ListBox列表选择框7.3 列表控件控件说明ListBox列表控件支持ItemsSource绑定数据源ComboBox下拉选择框7.4 选项卡控件TabControlTabItemHeader军事StackPanelTextBlock军事界面/TextBlock/StackPanel/TabItemTabItemHeader娱乐TextBlock娱乐界面/TextBlock/TabItem/TabControl7.5 控件对齐方式VerticalAlignment垂直对齐Top、Bottom、Center、StretchHorizontalAlignment水平对齐Left、Right、Center、StretchVerticalContentAlignment内容垂直对齐HorizontalContentAlignment内容水平对齐Margin外边距顺序左、上、右、下八、数据绑定8.1 静态资源绑定绑定到Resources中定义的资源。Window.Resourcessys:Stringx:Keystr1成龙/sys:Stringx:Arrayx:KeyitemsTypesys:Stringsys:String蔡徐坤/sys:Stringsys:String小刚/sys:String/x:Array/Window.ResourcesTextBlockText{StaticResource str1}/ListBoxItemsSource{StaticResource items}/8.2 DataContext 绑定数据上下文通过DataContext设置数据源使用{Binding Property}绑定属性。!-- 引入命名空间 --xmlns:vmclr-namespace:项目名.ModelWindow.DataContextvm:DataViewModel//Window.DataContextTextBlockText{Binding Id}/TextBlockText{Binding Name}/ListBoxItemsSource{Binding lists}/// DataViewModel.cspublicclassDataViewModel{publicintId{get;set;}100;publicstringName{get;set;}特朗普;publicListstringlists{get;set;}newListstring(){金发,商人,川建国};}8.3 代码动态添加数据privatevoidWindow_Loaded(objectsender,RoutedEventArgse){listbox.Items.Add(张三);listbox.Items.Add(李四);listbox.Items.Add(王五);}九、导航窗体9.1 导航窗体结构Window→NavigationWindow导航窗体NavigationWindow中包含多个Page页面9.2 设置导航窗体!-- 将 Window 改为 NavigationWindow --NavigationWindowx:Class项目名.MainWindowSourcePages/MainPage.xamlShowsNavigationUIFalse!-- ShowsNavigationUIFalse 隐藏默认导航箭头 --/NavigationWindow// Code-Behind 将 Window 改为 NavigationWindowpublicpartialclassMainWindow:NavigationWindow9.3 页面跳转// 方式一通过对象跳转this.NavigationService.Navigate(newPage1());// 方式二通过 URI 跳转this.NavigationService.Navigate(newUri(pack://application:,,,/Pages/Page2.xaml));// 返回上一页if(this.NavigationService.CanGoBack){this.NavigationService.GoBack();}十、渐变Brush10.1 线性渐变LinearGradientBrushWindow.BorderBrushLinearGradientBrushGradientStopCollectionGradientStopOffset0.0ColorRed/GradientStopOffset1.0ColorBlue//GradientStopCollection/LinearGradientBrush/Window.BorderBrush10.2 径向渐变RadialGradientBrushWindow.BackgroundRadialGradientBrushGradientStopCollectionGradientStopOffset0.0ColorRed/GradientStopOffset0.5ColorYellow/GradientStopOffset1.0ColorPink//GradientStopCollection/RadialGradientBrush/Window.Background十一、用户控件UserControl11.1 创建用户控件继承自UserControl类。包含独立的.xaml和.xaml.cs文件。可以封装可复用的界面组件。11.2 使用用户控件!-- 引入命名空间 --xmlns:ucclr-namespace:项目名.UserControlsuc:UserControl1Width250Height180/11.3 用户控件示例UserControlx:Class项目名.UserControls.UserControl1...GridBorderBorderBrushRedBackgroundLightGrayBorderThickness3CornerRadius5TextBlockText用户控件FontWeightBoldFontSize20//Border/Grid/UserControl十二、事件12.1 路由事件分类直接事件事件直接由触发事件的元素处理如Click。冒泡事件事件从内层标签向外层标签传播如MouseLeftButtonDown。隧道事件事件从外层标签向内层标签传播如PreviewMouseDown。12.2 常用事件// 按钮点击事件privatevoidButton_Click(objectsender,RoutedEventArgse){textblock1.BackgroundnewSolidColorBrush(Colors.Green);}// 鼠标按下事件privatevoidButton_MouseDown(objectsender,MouseButtonEventArgse){Window2w2newWindow2();w2.ShowDialog();}// 选择改变事件privatevoidlistbox_SelectionChanged(objectsender,SelectionChangedEventArgse){MessageBox.Show(listbox.SelectedItem.ToString());}// 窗体加载事件privatevoidWindow_Loaded(objectsender,RoutedEventArgse){// 初始化逻辑}十三、颜色与十六进制13.1 颜色表示格式#RRGGBB红、绿、蓝各 2 位范围 00-FF示例#007aa4、#63636613.2 颜色资源SolidColorBrushx:Keys1Color#007aa4/x:Arrayx:KeycolorsTypeColorColorRed/ColorColorGreen/ColorColorBlue/Color/x:Array十四、文本装饰TextBlockTextDecorationsStrikethrough穿过文本/TextBlockTextBlockTextDecorationsUnderline下划线文本/TextBlockTextDecorations常用值Strikethrough删除线、Underline下划线、OverLine上划线、Baseline基线。十五、总结对比知识点关键点XAML标签即对象属性即特性内容区可嵌套启动方式StartupUri简单、Startup事件灵活、自定义Main不推荐布局Grid行列、StackPanel堆叠、DockPanel停靠、WrapPanel自动换行样式全局 局部 行内支持 BasedOn 继承资源ResourceDictionary 可合并支持多种数据类型绑定{StaticResource} 静态绑定{Binding} DataContext 绑定导航NavigationWindow PageNavigationService 管理跳转渐变LinearGradientBrush线性、RadialGradientBrush径向用户控件封装可复用的 UI 组件通过 xmlns 引入路由事件直接、冒泡、隧道三种事件传播方式
返回列表