DotNew菜园的WPF入门教程系列回顾
Reference: http://www.cnblogs.com/chillsrc/p/4464023.html
CH01 Basic
小结:
都是基础中的基础,谈到WPF的开发,必须要学习MVVM,学习MVVM,就要首先了解MVC、MVP等概念。?
.net的本质没变,数据库的访问,文件的读写、日志处理、程序中异常的处理、报表、打印、性能的优化….
CH02 Application
WPF中常见的功能都封装在此类中,具体功能如下:
- 跟踪应用程序的生存期并与之交互
- 检索和处理命令行参数
- 检测和响应未经处理的异常
- 共享应用程序范围的属性和资源
- 管理独立应用程序中的窗口
- 跟踪和管理导航
主要讲代码Main方法启动WPF应用程序
自己新起一个App.cs
1 | [STAThread] |
CH03 Application_01
WPF Shutdown
ShutdownMode Properties:
OnLastWindowClosse OnMainWindowClose OnExplicitShutDown
Can modify it in App.xaml or in Background code
Application 对象的其他属性
Current Dispatcher MainWindow Properties ResourceAssembly Resources ShutdownMode StartupUri Windows
添加Application对象事件
Activated Deactivated DispatcherUnhandleException Exit FragmentNavigation LoadCompleted Navigated Navigating NavigationFailed NavigationProgress NavigationStopped SessionEnding Startup
CH04
Like Unity,从子线程中不能直接更新UI,Unity->用Loom可以办到,WPF采用Dispatcher.
1 | private void ModifyUI() |
另外一种方法
1 | private void btnAppBeginInvoke_Click(object sender, RoutedEventArgs e) |
CH05
第一次打开窗口时,只有在引发了Activated事件以后,才会引发Loaded和ContentRendered事件。
窗口的生命周期
1 | public MainWindow() |
1–SourceInitialized 2–Activated 3–Loaded 4–ContentRendered 5–Deactivated
1–Closing 2–Deactivated 3–Closed 4–Unloaded
CH06
Canvas 实例
1 | Ellipse el = new Ellipse(); |
Ch07
WarpPanel 排列?
StackPanel 填充排列
CH08
Grid
To use it, first to Add RowDefinitions & ColumnDefinitions
Ch09
DockPanel
1 | <Window x:Class="WpfApp1.WindowDock" |
Viewbox
StretchDirection
Stretch
None | 内容保持原样 | |
---|---|---|
Fill | 填充 | |
Uniform | 适合目标尺寸\ | |
UniformToFill | 裁剪 | |
UpOnly | ? |
---|---|
DownOnly | |
Both |
Ch10
Border
只有一个子控件,如果要多个,就加个Panel
Attributes
- Background
- BorderBrush
- BorderThickness
- CornerRadius
- Paddding
ScrollViwer
1 | <Grid> |
ch11
依赖属性基本介绍
Aim: To Solve Style ,Binding,Animation.
Attributes: The Binding Attributes is that it Can have no value And get value from Binding Data Source.
Usage:
Double Oriention Binding
Trigger
Append Attribute
Attribute Change Binding
Advantage
- New function
- Save Ram
- Support Multiple Object
Then How to Use:
heir your class from DependencyObject
The Defination of Attribute must use public static of DependencyProperty and the value has the Property to append
1
public static readonly DependencyProperty NameProperty;
How to register
1 | NameProperty = DependencyProperty.Register("Name",typeof(string),typeof(Student),new PropertyMatadata("名称",OnValueChanged)); |
Sealing
1
2
3
4
5public string Name
{
get{return(string)GetValue(nameProperty);}
set{SetValue(NameProperty,value);}
}
Then We can Write:
1 | public class Student: DependencyObject |
Conclusions
The Binding Attribute Calls the GetValue() SetValue() which is heired form the DependencyProperty,which is a IDictionary, Key is the HashCode and the Value is The Dependency Property we registered.
CH12
Ch13
1 | public MainWindow() |
Append Attributes
1 | class TurnoverManager : DependencyObject |
How to Use
1 | <Grid.RowDefinitions> |
这个貌似需要生成。
CH14
没看懂
三依赖属性控制Slider的最大最小值,有空再看一下
CH15
What is Data Binding?
The target U want to bind is any Attribute & Component that Inheir from DependencyProperty。
Attributes
Mode:
- Default
- OneTime
- OneWay
- OneWayToSource
- TwoWay
UpdateSourceTrigger:
- Default
- Explicit
- LostFocus
- PropertyChanged
https://images0.cnblogs.com/blog2015/10343/201508/061715297524204.png
Easy Example
1 | <TextBlock Width="248" Height="24" Text="{Binding ElementName=listStockName, Path=SelectedItem.Content}"> |
CH16
绑定模式如何应用呢?下面是个人的一点见解:
1)当只想让用户看到数据,而不希望用户去修改数据时,可以采用 OneWay 模式,类似winform中的只读属性。
2)当希望用户可以对控件中的数据进行修改,同时让用户修改的数据更新到数据源(DataSet、对象、XML 或其他绑定控件)中时,可以使用 TwoWay 绑定。
3)如果想让用户修改数据源中的数据,而又不想使用TowWay模式,就可以使用 OneWayToSource 绑定。OneWayToSource模式允许通过在原来被看作是绑定源的对象中放置绑定表达式,从而翻转源和目标。
4)当你的界面中的一系列只读控件均被绑定了数据,并且当用户刷新了数据源时,希望绑定控件中的值仍保持不变,可以使用 OneTime 绑定。此外,当源没有实现 INotifyPropertyChanged 时,OneTime 绑定模式也是一个不错的选择。
说明:绑定目标中的修改何时去修改数据源
在上面的例子中,TextBox 使用了 TwoWay 绑定模式,所以当TextBox 失去焦点时WPF会使用TextBox中的值改变ListBox中的值。如果你不想在TextBox失去焦点时,就去修改ListBox中的值,可以为 UpdateSourceTrigger 指定值,它是用于定义何时更新源的绑定属性。可以为 UpdateSourceTrigger 设置三个值:Explicit、LostFocus 和 PropertyChanged。
如果将 UpdateSourceTrigger 设置为 Explicit,则不会更新源,除非从代码中调用 BindingExpression.UpdateSource 方法。设置为LostFocus ,(TextBox 控件的默认值)指示数据源绑定的控件失去焦点时才会更新。PropertyChanged 值绑定控件的绑定属性每次发生更改时就去更新数据源中的值。
CH17
XML Data Binding
XmlDataProvider need a x:Key
1 | <Grid> |
xml
1 | <?xml version="1.0" encoding="utf-8" ?> |
ObjectDataProvider
Attributes
- ConstructionParameters
- MethodParameters
- ObjectInstance
- IsAsynchronous
通用数据模板 DataTemplate
1 | <Grid> |
Ch18
对数据排序
binding to CollectionViewSource
1 | <CollectionViewSource x:Key="studentsView" Source="{Binding Source={StaticResource students}}"> |
Ch19
后面就是实例了 没有贴代码