XAML是Silverlight、windowsphone和WPF的基础,它将界面和后台尽量分开,界面由各种布局控件、内容控件和资源(图片、动画等)展示,通过各个控件的Attibute(对应面向对象的Property)和Style进一步优化;然后用binding的方式将数据和控件进行绑定。Silverlight是WPF在Web端的应用,windowsphone开发是基于Silverlight的。
首先:
XAML主要布局控件是Grid、Canvas和StackPanel,还有DockPanel和WrapPanel用的少
Grid是网格布局;Canvas类似是web开发中的form,是绝对定位的(left和top属性决定位置);StackPanel有横向和竖向两种,StackPanel节点中的控件按照方向依次排开,一般只用于局部定位。
其次:
主要内容控件:
ContentControl族,包括Button,CheckBox等
HeaderdContentControl族
ItemsControl族
HeaderdItemsControl族
DecoratorControl族
TextBlock和TextBox:TextBox不说了,TextBlock就是Lable
ShapeControl族
PanelControl族
最后:
控件的数据绑定
1、通过Binding实例绑定
Binding b=new Binding();
b.Source=stu;//stu是一个实例化的类
b.Path=new PropertyPath("Name");//使用的是stu.Name属性
BingdingOperations.SetBinding(TextBox控件,TextBox控件.TextProperty,b);
2、属性设置
texteBox1.SetBinding(TexteBox.TextProperty,new Binding("Value",ElementName="controlname"));
3、XAML控件中直接指明
<Textbox Text="{Binding Path=Value,ElementName=controlname}"/>//ElementName是同页面的其他控件,引用的值是ElementName的Value值
注:当绑定的源是个字符串的话,Path=.或者省略Path
例子:
<StackPanel x:Name="TitlePanel" Grid.ColumnSpan="3">
<StackPanel.Resources>
<sys:String x:Key="post">
一首诗
</sys:String>
</StackPanel.Resources>
<TextBlock x:Name="ApplicationTitle" Text="{Binding Path=., Source={StaticResource ResourceKey=post}}"
4、Binding数据库
最简单的数据展示:
listbox.DisplayMemberPath="Name";
listbox.ItemsSource=dt.DefaultView;
在WPF中可以用ListView控件在XAML中展示 ,ListView继承于ListBox。
首先后台要设置ListView..ItemsSource=dt.DefaultView;
<ListView>
<ListView.View>
<GridView.View>
<GridViewColumn DisplayMemberBinding={Binding Id} />//Id是数据表中的字段
</GridView.View>
</ListView.View>
</ListView>
5、数据绑定校验和转换
用验证类进行校验,例如RangeValidation,然后Bingding.ValidationRules.Add(RangeValidation);
通过继承接口IValueConvert以及实现两个方法Convert(数据从数据源转到控件)和ConvertBack(数据从数据源转到控件),
例如:
<Image Source="{Binding Path=., Converter={StaticResource cts}}"/>//cts要在资源标签下声明,
<StackPanel x:Name="TitlePanel" Grid.ColumnSpan="3">
<StackPanel.Resources>
<local CategorySource x:Key="cts"/>
</StackPanel.Resources>
<Image Source="{Binding Path=., Converter={StaticResource cts}}}"/>
其中CategorySource是实现IValueConvert接口的类
6、绘图
绘图类:Line(直线)、Rectangle(矩形)、Ellipse(椭圆)、Polygon(多变形,闭合区域)、PolyLine(多边形,不闭合)和Path(很牛逼,直线、圆弧、曲线自由组合)
图的效果:用BitmapEffect或者Effect控制,例如
<Button>
<Button.BitmapEffect>
<DropShadowBitmapeEffect></DropShadowBitmapeEffect>
</Button.BitmapEffect>
</Button>//其中DropShadowBitmapeEffect是一种绘图的效果
图的变形:类似<Button.BitmapEffect>,Button.BitmapEffect换成Button.RenderTransform
图的填充:有SolidColorBrush(实线填充),LinearGradientBrush(渐变填充),RadicGradiendBrush(放射性渐变填充)和ImageBrush(图片填充)四种。
几何图形:LineGeometry,RectangleGeometry,EllipseGeometry,GeometryGroup,PathGeometry,和Shape命名空间下的Line类的区别在于,集合图形用的是起始坐标点完成绘制。
7、动画
绘画所有动画都源于类TimeLine,一个控件的动画用类AnimationTimeLine实现,多个控件的写作动画由StoryBoard实现
8、事件
WPF的事件响应和javascript一样,都是子控件触发事件后,会逐级递送至各级父控件。
如果需要父控件捕捉子控件的事件,需要事件路由。
parentControl.AddHandle(Button.ClickEvent,new RoutedEventHandle(sonControlClick);//Button.ClickEvent是需要路由的事件类型,sonControlClick是具体需要路由的子控件事件