Style是一组<Setter>,也就是一组属性设置器。
·使用Style时,如果Value的值比较简单,那就直接用Attribute值来表示,如果Value值不能用一个简单地字符串描述就需要使用XAML的属性对象语法。
ControlTemplate最终将被应用到一个控件上,称这个控件为模板目标控件或模板化控件(Templated Control),ControlTemplate里的控件可以使用TemplateBinding将自己的属性值关联在目标控件的某个属性上,必要的时候还可以田间Converter.
WPF的UI元素可以看作两棵树--LogicalTree和VisualTree,这两棵树的交点就是ControlTempalte。如果把界面上的控件元素看作是一个结点,那元素们构成的就是LogicalTree,如果把控件内部由ControlTemplate生成的控件也算上,那构成的就是VisualTree。换句话说,在LogicalTree上导航不会进入空间内部,而在VisualTree上导航则可检索到控件内部由ControlTemplate生成的子级控件。
ItemsControl具有一个名为ItemsPanel的属性,其数据类型为ItemsPanelTempalte。ListBox的内容横向显示示例如下:
<Window x:Class="MyTestWpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="RuntimePopup" Height="300" Width="300">
<Grid Margin="6">
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<TextBlock Text="Allan"/>
<TextBlock Text="Kevin"/>
<TextBlock Text="Drew"/>
<TextBlock Text="Timothy"/>
</ListBox>
</Grid>
</Window>
凡是Template,最终都是要作用在控件上的,这个控件就是Tempalte的目标控件,也叫模板化控件(Templated Control)。
决定控件外观的是ControlTempalte,决定数据外观的是DataTemplate,它们正是Control类的Template和ContentTemplate两个属性的值。