当前位置:编程学习 > C#/ASP.NET >>

WPF中模板(ControlTemplate and DataTemplate)

WPF中的模板是一个特别重要的概念,对于做UI开发的同学来说熟悉ControlTemplate(控件模板) 和DataTemplate(数据模板)是必须掌握的技能,否则就只能做个拖控件的菜鸟。

下面就着重介绍下这两类模板的概念和使用。

1.ControlTemplate 就是我们常说的控件模板,主要用途是更改控件的外观,比如你要修改一个Button的形状是圆形的,改变背景颜色,定制动画效果等等。

下面举例说明它的应用,一个简单的例子就是我们想把TabControl的tab页放在下面,那么就可以这样修改TabControl的style

[csharp] 
<Style TargetType="{x:Type TabControl}" x:Key="ButtomTab"> 
        <Setter Property="Template"> 
            <Setter.Value> 
                <ControlTemplate TargetType="{x:Type TabControl}"> 
                    <Grid> 
                        <Grid.RowDefinitions> 
                            <RowDefinition Height="*"/> 
                            <RowDefinition Height="Auto"/> 
                        </Grid.RowDefinitions> 
                        <TabPanel Grid.Row="1" Panel.ZIndex="1" Margin="0" IsItemsHost="True" Background="Transparent" /> 
                        <Border Grid.Row="0" Background="White" BorderThickness="1 0 1 0" CornerRadius="0" > 
                            <ContentPresenter ContentSource="SelectedContent" /> 
                        </Border> 
                    </Grid> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 

从代码中我们可以看到ControlTemplate 里面是一个Grid然后你可以布局它的TabPanel的位置,我们把TabPanel 的属性设置为Grid.Row="1" 这样就使得TabPanel 放在了内容
ContentPresenter 的下面 这样我们就可以得到一个tab页在下面的tabcontrol控件。看吧,够简单easy吧。

具体怎么设置style,每个控件的controltemplate是什么样的 可以看看这篇文章有了它wpf的style可以任你发挥了

当然在controltemplate里面还有个非常重要的概念就是trigger,在以后的博客里我会具体介绍tirgger的使用。


2.DataTemplate就是我们所说的数据模板,主要用于数据的呈现,比如你列表控件里面放哪些数据,怎么排版这些数据,是横着排还是竖着排。大部分在itemscontrol和treeview类得控件绑定数据所用,它不影响外观,只为呈现数据内容。

DataTemplate的使用比较简单 示例如下

[csharp]
<ItemsControl x:Name="ic_PowerPort" AlternationCount="2"> 
                      <ItemsControl.ItemTemplate> 
                          <DataTemplate> 
                              <Border Margin="1" x:Name="back" Height="50"> 
                                  <ToggleButton HorizontalAlignment="Stretch" MouseDoubleClick="ToggleButton_Click"> 
                                      <DockPanel > 
                                          <TextBlock Text="{Binding Name}" ToolTip="{Binding Name}"  Margin="10 0 0 0" VerticalAlignment="Center" TextTrimming="WordEllipsis"/> 
                                          <Image x:Name="_img" Width="18" Height="18" Margin="10 0" MouseLeftButtonDown="DelPowerPort_Click" HorizontalAlignment="Right" Source="/Vdc3D.Coms.DModelEditor;component/Images/del.png"/> 
                                      </DockPanel> 
 
                                  </ToggleButton> 
                              </Border> 
                      </ItemsControl.ItemTemplate> 
                  </ItemsControl> 
从上面的代码我们可以看出给定一个ItemsControl 的控件用于显示一个列表,里面绑定一个对象的Name属性,同是还有个Image 用于删除,由此可以知道DataTemplate的主要作用是在绑定数据的时候做数据呈现的。

在此特别说明下TreeView 的数据绑定需要一个HierarchicalDataTemplate 它是一个级联的绑定数据模板

[csharp]
<TreeView Name="_tree" Margin="0" BorderThickness="0" VerticalAlignment="Stretch" Background="Transparent" ItemsSource="{Binding Children}" > 
 &nbs

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,