WPF 中 Template 与DataTemplate的区别

1、WPF中Template是一个ControlTemplate类型的对象,WPF可由用户根据应用需要定制应用的界面呈现内容及方式,而ControlTemplate就是相关控件界面外观的决定性因素之一,对于 一个按钮控件而言,你可以采用类似的方式定义Button控件的界面外观。参考代码如下:

<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}" >
                    <Border Background="{DynamicResource CornerButtonStyleBrush}" x:Name="border" BorderBrush="{StaticResource CornerBorderBrush}"  CornerRadius="3,3,3,3"   BorderThickness="2,2,2,2" SnapsToDevicePixels="true" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
                        <ContentPresenter x:Name="contentPresenter"  Content="{TemplateBinding  Content}"  HorizontalAlignment="Center" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" OpacityMask="Black"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsDefaulted" Value="true">
                            <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" TargetName="border" Value="{StaticResource CBorderMouseBrush}"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter Property="Background" TargetName="border" Value="{StaticResource CBorderMouseBrush}"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Background" TargetName="border" Value="{StaticResource CornerDisableBrush}"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

在控件模板中主要定了界面的外观呈现方式,以及 响应事件是界面的外观呈现方式。

在单项内容控件中,即ContentControl控件,如:Button、Lable等类控件中,提供了ContentTemplate属性,该属性是一个类型为 DataTemplate类型的对象,在ContentTemplte 中你不仅仅可以定义控件的外观呈现方式,还可以通过数据绑定的方式与DataContext对象的属性绑定,实现数据驱动模式的内容呈现。这一类的数据绑定方式可以应用于ContentControl类型控件的内容于后台数据的绑定,更多应用于 ItemsControl类控件,实现和后台多项数据内容的绑定。如图形方式呈现电影院座位的样式代码:

<Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <WrapPanel  Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource   AncestorType=ScrollContentPresenter}}"></WrapPanel>
                </ItemsPanelTemplate>
            </Setter.Value>
                
        </Setter>
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Button x:Name="seatBtn" Style="{StaticResource SeatsBtnStyle}" Content="{Binding Numbers}" Visibility="{Binding Used}" Tag="{Binding Status}"></Button>
                    <DataTemplate.Triggers>
                        <Trigger Property="Tag" Value="0">
                            <Setter Property="Background" Value="Beige"  TargetName="seatBtn"/>
                        </Trigger>
                        <Trigger Property="Tag" Value="1">
                            <Setter Property="Background" Value="Red"  TargetName="seatBtn"/>
                        </Trigger>
                        <Trigger Property="Tag" Value="2">
                            <Setter Property="Background" Value="Green"  TargetName="seatBtn"/>
                        </Trigger>

                    </DataTemplate.Triggers>
                </DataTemplate>
            </Setter.Value>


        </Setter>

控件模板适合对控件的依赖属性进行模板绑定,数据模板用于绑定数据源的一个或多个数据对象

猜你喜欢

转载自blog.csdn.net/u012846041/article/details/80927210