Fir*_*roz 194 wpf datatemplate controltemplate
WPF中a ControlTemplate和a有什么区别DataTemplate?
Mat*_*ton 258
通常,控件是为了它自己而呈现的,并不反映底层数据.例如,a Button不会绑定到业务对象 - 它纯粹是因为它可以被点击.甲ContentControl或者ListBox,然而,一般出现,使他们能够对用户显示数据.
DataTemplate因此,A 用于为底层数据提供可视化结构,而a ControlTemplate与底层数据无关,只是为控件本身提供可视化布局.
A ControlTemplate通常只包含TemplateBinding表达式,绑定回控件本身的属性,而a DataTemplate将包含标准的Binding表达式,绑定到它的属性DataContext(业务/域对象或视图模型).
Bry*_*son 106
非常基本上ControlTemplate描述了如何在DataTemplate描述如何显示数据时显示控件.
例如:
A Label是一个控件,将包含一个ControlTemplate表示Label应该使用Border一些内容(一个DataTemplate或另一个控件)显示的控件.
甲Customer类是数据和将利用被显示在DataTemplate其中可以说显示Customer类型作为StackPanel含有两个TextBlocks一个表示名称和其他显示的电话号码.注意所有类都是使用显示可能会有所帮助DataTemplates,您通常只使用默认模板,该模板TextBlock的Text属性设置为Object ToString方法的结果.
onm*_*133 31
Troels Larsen在MSDN论坛上有很好的解释
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="ButtonContentTemplate">
<StackPanel Orientation="Horizontal">
<Grid Height="8" Width="8">
<Path HorizontalAlignment="Stretch"
Margin="0,0,1.8,1.8"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FF000000"
Data="M0.5,5.7 L0.5,0.5 L5.7,0.5"/>
<Path HorizontalAlignment="Stretch"
Margin="2,3,0,0"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FFFFFFFF"
Data="M3.2,7.5 L7.5,7.5 L7.5,3.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1.2,1.4,0.7,0.7"
VerticalAlignment="Stretch" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000"
Data="M2.5,2.5 L7.5,7.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1.7,2.0,1,1"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FF000000"
Data="M3,7.5 L7.5,7.5 L7.5,3.5"/>
<Path HorizontalAlignment="Stretch"
Margin="1,1,1,1"
VerticalAlignment="Stretch" Stretch="Fill" Stroke="#FFFFFFFF"
Data="M1.5,6.5 L1.5,1 L6.5,1.5"/>
</Grid>
<ContentPresenter Content="{Binding}"/>
</StackPanel>
</DataTemplate>
<ControlTemplate TargetType="Button" x:Key="ButtonControlTemplate">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Window.Resources>
<StackPanel>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="1"/>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="2"/>
<Button Template="{StaticResource ButtonControlTemplate}" ContentTemplate="{StaticResource ButtonContentTemplate}" Content="3"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
小智 19
ControlTemplate:表示控件样式.
DataTemplate:表示数据样式(您希望如何显示数据).
所有控件都使用您可以通过模板属性覆盖的默认控件模板.
例如,
Button模板是控件模板.
Button内容模板是一种数据模板
<Button VerticalAlignment="Top" >
<Button.Template>
<ControlTemplate >
<Grid>
<Rectangle Fill="Blue" RadiusX="20" RadiusY="20"/>
<Ellipse Fill="Red" />
<ContentPresenter Content="{Binding}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="50">
<TextBlock Text="Name" Margin="5"/>
<TextBox Text="{Binding UserName, Mode=TwoWay}" Margin="5" Width="100"/>
<Button Content="Show Name" Click="OnClickShowName" />
</StackPanel>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
public String UserName
{
get { return userName; }
set
{
userName = value;
this.NotifyPropertyChanged("UserName");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69471 次 |
| 最近记录: |