深入浅出WPF 学习笔记一
C++程序员为什么要学习C#?
作为一个C++开发程序员,我其实是不太喜欢C#和界面相关的东西的,不过后来想清楚了,任何语言都是为了解决问题,现在工作中,遇到的问题必须要通过C#和WPF来解决,既然逃不过,那不如深度学习,况且程序员就是要有终身学习的态度。享受C#,享受WPF,嗯。
XAML
XAML = HTML+CSS+JavaScript。WPF中专门用来设计UI的语言。
- Properties:资源和配置信息。
- 引用:References:引用的其他项目。
- App.xaml:程序主体,声明主窗体是哪个。
- MainWindow.xaml:主窗体。
Attribute主要对应标签特征,Property主要对应类属性。
WPF基本类库包含了VisualTreeHelper和LogicalTreeHelper两个助手类,方便寻找当前节点的父子节点等操作。
书里面提供的线性渐变的图,还可以。
<Rectangle x:Name="rectangle" Width="200" Height="120">
<Rectangle.Fill>
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Offset="0.2" Color="LightBlue"></GradientStop>
<GradientStop Offset="0.7" Color="Blue"></GradientStop>
<GradientStop Offset="1.0" Color="DarkBlue"></GradientStop>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
x:Name x:Key
- 所有的WPF控件都有Name属性,没有Name属性的一般就要用x:Name,正常都会用x:Name。
- x:FieldModifier:用来改变引用变量的访问级别,正常是internal,可以改为public,有需要的时候用。
- x:Key给资源添加索引。
- x:Shared 只有false和true两种属性,配合x:Key来使用,用来设定每次检索到的对象是否是同一个对象,默认是true。
- FindResource:调用一个包含Resources属性的对象的FindResource方法可以在它的资源字典里面检索资源。检索到资源以后再把它恢复成正确的数据类型就可以了。
在xaml中定义的文本和按钮
<Window x:Class="MyFirstWpfApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyFirstWpfApplication"
xmlns:sys ="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="Window1" Height="450" Width="800">
<Window.Resources>
<sys:String x:Key="myString"> Hello WPF!</sys:String>
</Window.Resources>
<Grid>
<StackPanel>
<TextBox Text="{StaticResource ResourceKey=myString}" Margin="5"></TextBox>
<TextBox x:Name="textBox1" Margin="5"/>
<Button Content="Show" Margin="5" Click="Button_Click"/>
</StackPanel>
</Grid>
</Window>
xaml.cs中定义的FindResource
private void Button_Click(object sender, RoutedEventArgs e)
{
String str = this.FindResource("myString") as string;
this.textBox1.Text = str;
}
- x:Type:在xaml中想表达某个数据类型时,使用x:Type标记扩展。
- 自定义窗体来实现对UserWindowType类型的扩展。只需要在xaml中更换UserWindowType的值就可以了。
- 黄金分割比大概是长宽比为5:3。
- x:Array的作用是是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,向一个ListBox提供数据。
- 在一个类中定义一个字段时直接给它赋值,但是定义一个属性的时候,会给它设置get和set方法。
控件与布局
- WPF是数据驱动UI,数据是核心,是主动的。
- GroupBoix:带Header的控件。
- ItemsControl族控件:自动使用条目容器提交给它的容器进行包装,一般都是一个集合。集合拿到以后,处理问题的时候直接去处理集合本身即可。下面这几个好好留着吧,总有用到的一天。
- TextBlock,不能编辑,静态文本,内容属性是Inlines。
- TextBox,允许编辑,只显示简单字符串,内容属性是text。
- Canvas:内部元素可以用像素单位进行绝对坐标定位。
- DockPanel内的最后一个元素会把DockPanel内部的所有剩余空间占满。
- 要想实现一个可拖拽的分隔栏,只能使用Grid和GridSplitter来实现这个功能。
- WrapPanel使用流式布局,排不下的控件会另起一行或一列,重新排布。