6 ответов:
обычно элемент управления отображается сам по себе и не отражает базовые данные. Например,
Buttonне будет привязан к бизнес-объекту - он там чисто, чтобы его можно было щелкнуть. АContentControlилиListBox, однако, как правило, появляются, так что они могут представить данные для пользователя.A
DataTemplate, следовательно, используется для обеспечения визуальной структуры для базовых данных, в то время какControlTemplateне имеет ничего общего с исходными данными и просто обеспечивает визуальный макет для взять себя.A
ControlTemplateобычно содержит толькоTemplateBindingвыражения, привязка к свойствам на самом элементе управления, в то время какDataTemplateбудет содержать стандартные выражения привязки, привязки к свойствам егоDataContext(бизнес-объект / домен или модель представления).
очень в основном a
ControlTemplateописывает, как отображать элемент управления в то время какDataTemplateописывает, как отображать данные.например:
A
Labelконтроль и будет включать в себяControlTemplateЧто говоритLabelдолжно отображаться с помощьюBorderвокруг некоторого содержания (aDataTemplateили другой элемент управления).A
Customerкласс-это данные и будет отображаться с помощьюDataTemplateкоторый мог бы сказать, чтобы отобразитьCustomerтип какStackPanelсодержащий дваTextBlocksодин показывает имя, а другой-номер телефона. Это может быть полезно отметить, что все классы отображаются с помощьюDataTemplates, вы просто обычно используете шаблон по умолчанию, который являетсяTextBlockСTextсвойство, установленное в результате объектаToStringметод.
У Троэльса Ларсена есть хорошее объяснение на форум 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>
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"); } }
ControlTemplate- изменение внешнего вида элемента. НапримерButtonможет содержать изображение и текст
DataTemplate- представление базовых данных с использованием элементов.
ControlTemplateопределяет внешний вид,DataTemplateзаменяет внешний вид элемента данных.пример: я хочу показать кнопку от прямоугольной формы до круга => шаблон управления.
и если у вас есть сложные объекты управления, он просто звонит и показывает
ToString()СDataTemplateвы можете получить различные элементы и отображать и изменять их значения объекта данных.
Comments