博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF快速精通版
阅读量:5865 次
发布时间:2019-06-19

本文共 9260 字,大约阅读时间需要 30 分钟。

命名空间:xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:UserNamespace"       WPF布局1.Cavas画布:设置坐标值来布局,分别为Top, Left, Bottom., Right如:Canvas.SetTop(控件名, 数值);2.DockPanel面版:为其子控件提供相对的停靠位置, 包括向左停靠(Dock.Left),向右停靠(Dock.Right),向下停靠(Dock.Bottom),向上停靠(Dock.Up)3.StackPanel面版:按照水平线方向或垂直线方向排列控件,按照指定的方向(HorizontalAlignment, VerticalAlignment)向其中添加子控件.4.WrapPanel面版:自动换行子控件的布局,当子一行(或一列)不足以放置新控件时,WrapPanel将自动地将子控件放置到新行(或新列,这取决于Orientation属性)5.Grid网格:Grid通过自定义行列来进行布局,这类似于表格.6.UniGrid平均网格:Grid通过自定义行列来进行布局,每个格子大小一样。7.ViewBox视图:可以自动缩放8.ScrollViewer流动视图WPF资源1.资源通常用作“样式”(Style)、样式模板、数据模板等1). 应用程序级资源:定义在App.xaml文件中,作为整个应用程序共享的资源    
2). 窗体资源:定义在Window或Page中,作为一个窗体或页面共享的资源存在
3). 文件资源:定义在资源字典的XAML文件中
Button Background="{StaticResource ResourceKey=redBrush}">使用文件资源 4).对象(控件)资源:定义在某个ContentControl中,作为其子容器、子控件共享的资源
2.资源文件解析的顺序这个顺序和层叠样式表类似,优先级从高到底为:对象级,窗体级,应用程序集。静态资源(StaticResource)和动态资源(DynamicResource)3.静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用。这是通过使用 StaticResource 标记扩展或 DynamicResource 标记扩展完成的。通常来说,不需要在运行时更改的资源使用静态资源;而需要在运行时更改的资源使用动态资源。动态资源需要使用的系统开销大于静态资源的系统开销。 4.使用mscorlib资源1).window添加命名空间xmlns:sys="clr-namespace:System;assembly=mscorlib"2).添加资源
string!!!!!
数据1
数据2
3).使用资源
4).后台调用资源string str=this.FindResource("myString") as string;local资源1).添加空间引用xmlns:local="clr-namespace:UserNamespace"2).定义后台程序public class PathConverter:IValueConverter{}3).定义local资源
4).定义local资源
5.可拓展标记资源1).定义资源
2).调用标记
3).后台编程private void button1_Click(object sender, RoutedEventArgs e){ SolidColorBrush scb = this.button2.Background as SolidColorBrush; scb.Color=Colors.Green;}WPF中的Style【只能改变控件的已有属性值】Style是作为一种资源
TargetType="控件类型" 指示该Style的作用对象是控件类型Setter设置器 Property="属性" Value="属性值"x:key="key唯一名称" 调用方式:Style="{StaticResource key唯一名称}"BasedOn="{StaticResource 继承另一个Style的key}"后台编程this.Button1.Style = (Style)FindResource("keyStyle");WPF引用外部样式实现方法: 1.创建新建项添加/资源字典Style.xaml,并添加Style样式
……
2.引用外部资源,注意:在Window中添加外部样式需要指定key,而Application中则不需要1).Window中添加外部样式
3.将样式应用到窗口的布局上
...
WPF引用其他程序集中的样式
Style中的Trigger(触发器)【同样是样式,Trigger是预设的样式】1).属性触发器Trigger,当与预设的属性值一致时,就会触发预设值的样式
注释:
,当属性IsPressed为True时,就会触发Trigger预设的样式; WPF异步调用 this.Dispatcher.BeginInvoke(new Action(()=> this.textBlock1.Text = DateTime.Now.ToString("HH:mm:ss fff"); })); 2).多属性触发器MultiTrigger
//Style Setter
3).数据触发器DataTrigger
xaml页面
4.多条件数据触发器MultiDataTriggerMultiDataTrigger这个类似MultiTrigger5.事件触发器EventTrigger
//Style Setter
WPF中的ControlTemplate(控件模板)【由多个控件组合构成一个新的控件】WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate其实WPF的每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应。我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件。ControlTemplate包含两个重要的属性:1,VisualTree,该模板的视觉树,其实我们就是使用这个属性来描述控件的外观的2,Triggers,触发器列表,里面包含一些触发器Trigger,我们可以定制这个触发器列表来使控件对外界的刺激发生反应,比如鼠标经过时文本变成粗体等。示例:画圆
注释:Width="{TemplateBinding Button.Width}",绑定控件的Width属性
,模版定义
,控件模版定义,里面是定义视觉树即排版事件触发器(EventTrigger),触发预设的事件时调用的触发器2).模版可以独立设置
调用模版:
3).数据模版【同样是模版只是绑定了数据DataType】【使用数据列表】 第一步:定义数据 namespace DataNameSpace { public class DataClass { //数据List、Array、Model…… } } 第二步:XAML引用空间 xmlns:data="clr-namespace:DataNameSpace" 第三步:调用类别
第四步:调用数据 Source="{Binding 数据}" 第五步:调用模版 ItemTemplate="{StaticResource DataT}" 第六步:指定数据源 public MainWindow() { InitializeComponent(); List
cars = new List
() { new People(){ name="杨家",age="10"}, new People(){ name="李家",age="20"}, new People(){ name="吴家",age="30"}, new People(){ name="郭家",age="40"} }; this.lbxControl.ItemsSource = cars; }示例:设置个人信息 第一步:定义数据对象 namespace DataNameSpace { public class DataClass { public string name { set; get; } public string age { set; get; } } } 第二步:XAML引用空间 xmlns:data="clr-namespace:DataNameSpace" 第三步:数据模版调用类别
第四步:调用数据 Source="{Binding 数据}" 第五步:控件调用模版
第六步:绑定数据源 public MainWindow() { InitializeComponent(); List
cars = new List
() { new People(){ name="杨家",age="10"}, new People(){ name="李家",age="20"}, new People(){ name="吴家",age="30"}, new People(){ name="郭家",age="40"} }; this.lbxControl.ItemsSource = cars; }WPF转换器IValueConverter接口 //转化为图片 public class ImagesPathConverter:IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string uriStr = string.Format(@"images/{0}.jpg",value.ToString()); return new BitmapImage(new Uri(uriStr, UriKind.Relative)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }HierarchicalDataTemplate分层数据模版
WPF绑定Binding【只是把一个对象属性值绑定在另一个对象的属性上】1. DataContext共享源,子控件都可以调用父级资源【适用实体对象】 第一步:定义数据对象 namespace DataNameSpace { public class DataClass { public string name { set; get; } } } 第二步:调用数据
第三步:绑定数据源 this.txtName.DataContext = new People() { name = "microsoft-zn.cn" };同样的方式:
2.双向绑定,实现更新控件UI(Invoke)示例:using System.ComponentModel;public partial class MainWindow : Window { Micro ms; public MainWindow() { InitializeComponent(); ms = new Micro() { name = "microsoft-zn.cn" }; this.txtName.DataContext = ms; } private void txtNameChange_TextChanged(object sender, TextChangedEventArgs e) { //this.txtName.Text = this.txtNameChange.Text; ms.name = this.txtNameChange.Text; //双向绑定 } } //对象Micro的name属性发生改变是,控件UI发生更新 public class Micro : INotifyPropertyChanged { private string _name; public event PropertyChangedEventHandler PropertyChanged; public string name { get { return _name; } set { _name = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("name")); } } } }3.Binding1).Mode属性oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。OneWayToSource: 绑定会将数据从目标发送到源。TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.2).绑定到其它元素
3).绑定到静态资源
Hello, World!
4).绑定到自身
5).绑定到指定类型的父元素
6)绑定到集合 public class Person { public string name { get; set; } } public class PersonList : ObservableCollection
{}
7).使用XML作为Binding的源xml文件
xaml页面
后台代码 XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load("Person.xml"); XmlDataProvider xdp = new XmlDataProvider(); xdp.Document = xmlDocument; xdp.XPath = @"/PersonList/Person"; this.personListView.DataContext = xdp; this.personListView.SetBinding(ListView.ItemsSourceProperty, new Binding()); 7.后台代码设定Binding1).准备Binding对象Person p = new Person { age = 20, name = "Microsoft" }; Binding binding = new Binding();binding.Source = p;binding.Path = new PropertyPath("name");2).用Binding对象将数据源和目标连结假如在XAML处添加了一个TextBlock目标
3).那么可以使用BindingOperations.SetBinding()方法将其进行binding了。BindingOperations.SetBinding(txtName, TextBlock.TextProperty, binding);4).也可以使用UI元素的基类FramworkElement封装的SetBinding函数txtName.SetBinding(TextBlock.TextProperty, binding);5).将上面两步结合在一起可以这样写txtName.SetBinding(TextBlock.TextProperty, new Binding("Name") { Source=p});WPF事件路由 1).获取事件来源xaml代码
cs代码private void rootGrid_Click(object sender, RoutedEventArgs e) { MessageBox.Show((e.Source as FrameworkElement).Name); //btnOk MessageBox.Show((e.OriginalSource as FrameworkElement).Name); //btnOk }WPF命令WPF提供常用应用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和EditingCommands。ApplicationCommands(应用程序命令):CancelPrint:取消打印Close:关闭ContextMenu:上下文菜单Copy:复制CorrectionList: Gets the value that represents the Correction List command.Cut:剪切Delete:删除Find:查找Help:帮助New:新建NotACommand:不是命令,被忽略Open:打开Paste:粘贴Print:打印PrintPreview:打印预览Properties:属性Redo:重做Replace:取代Save:保存SaveAs:另存为SelectAll:选择所有的Stop:停止Undo:撤消 示例:xaml文件
cs文件private void Command_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = string.IsNullOrEmpty(textBox.Text); } private void Command_Executed(object sender, ExecutedRoutedEventArgs e) { //执行命令 if (e.Parameter.ToString() == "Library") {}}

 

转载地址:http://ktynx.baihongyu.com/

你可能感兴趣的文章
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
Dynamic Performance Tables not accessible Automatic Statistics Disabled for this session
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
hexo博客解决不蒜子统计无法显示问题
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
java ShutdownHook介绍与使用
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
grep 零宽断言
查看>>