WPF에서의 컨트롤 템플릿과 DataTemplate의 차이
의 차이점은 무엇입니까?ControlTemplate
및 aDataTemplate
WPF에서요?
일반적으로 컨트롤은 그 자체를 위해 렌더링되며 기본 데이터는 반영되지 않습니다.예를 들어,Button
비즈니스 오브젝트에 얽매이지 않습니다.클릭할 수 있도록 순수하게 존재하는 것입니다.aContentControl
또는ListBox
단, 일반적으로는 사용자에게 데이터를 제공할 수 있도록 표시됩니다.
A DataTemplate
따라서 기본 데이터에 대한 시각적 구조를 제공하기 위해 사용됩니다.ControlTemplate
는 기본 데이터와는 무관하며 컨트롤 자체에 대한 시각적 레이아웃만 제공합니다.
A ControlTemplate
일반적으로 포함되다TemplateBinding
표현식, 컨트롤 자체의 속성에 바인딩하는 동안DataTemplate
표준 바인딩 표현식을 포함하고 속성에 바인딩합니다.DataContext
(비즈니스/도메인 객체 또는 뷰 모델).
기본적으로는ControlTemplate
에, 컨트롤 표시 방법을 나타냅니다.DataTemplate
에 데이터를 표시하는 방법을 나타냅니다.
예를 들어 다음과 같습니다.
A Label
컨트롤이며, 다음 명령어를 포함합니다.ControlTemplate
라고 하는 것은Label
를 사용하여 표시해야 합니다.Border
일부 콘텐츠(a)에 대해서DataTemplate
또는 다른 제어).
A Customer
class는 Data로 표시됩니다.DataTemplate
이 명령어는 이 명령어를Customer
로 타이핑하다.StackPanel
두 개 포함TextBlocks
하나는 Name을 나타내고 다른 하나는 전화번호를 표시합니다.모든 클래스는 다음과 같이 표시됩니다.DataTemplates
는 보통 기본 템플릿인TextBlock
와 함께Text
오브젝트의 결과로 설정된 속성ToString
방법.
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>
(각각 http://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate.aspx 및 http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.contenttemplate%28VS.95%29.aspx에서 노골적으로 도난당한 템플릿)
어쨌든 ControlTemplate는 단추 자체의 모양을 결정하는 반면 ContentTemplate는 단추의 내용을 결정합니다.따라서 콘텐츠를 데이터 클래스 중 하나에 바인딩하고 원하는 대로 콘텐츠를 표시할 수 있습니다.
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
이치노
예:직사각형에서 원 형태로 => 컨트롤 템플릿으로 버튼을 표시하고 싶습니다.
경우 을 통해 "Calling"이 표시되며, "Colling"은 "Calling"으로 표시됩니다.ToString()
, 를 사용하여, 를 참조해 주세요.DataTemplate
다양한 멤버를 가져와 데이터 객체의 값을 표시하고 변경할 수 있습니다.
위의 답변은 모두 훌륭하지만, 간과한 중요한 차이가 있습니다.그것은 언제 무엇을 사용할지에 대한 더 나은 결정을 내리는 데 도움이 됩니다.렇렇 it it it it 。ItemTemplate
★★★★
DataTemplate는 ItemTemplate 속성을 제공하는 요소에 사용되며, 이 속성을 사용하여 해당 항목의 내용을 바꿀 수 있습니다.
DataTemplate
에 따라 정의합니다.s s 、 [ S ] 、 [ S ] 、 [ S ] 。하지만 제어가 이 고급스러움을 제공하지 않는 경우에도
ContentView
된 내용을 할 수 .ControlTemplate
것은, 「이러다」, 「이러다」를 변경할 수 있습니다ControlTemplate
ContentView
하나 은 이 컨트롤이 있는 것과 달리ItemTemplate
수 .TemplateSelector
§ (Content View)컨트롤의 경우.하여 '나', '나'를 할 수는 .ControlTemplate
행행시 。
언급URL : https://stackoverflow.com/questions/1340108/difference-between-control-template-and-datatemplate-in-wpf
'programing' 카테고리의 다른 글
초보자용 Git:최종적인 실용적인 가이드 (0) | 2023.04.10 |
---|---|
Swift 목록에서 줄 구분 기호를 삭제하는 방법ForEach를 사용하지 않는 UI? (0) | 2023.04.10 |
React에서 JQuery를 사용하는 방법JS (0) | 2023.04.05 |
단순 ng-repeat용 단방향 바인딩? (0) | 2023.04.05 |
TypeScript의 public static const (0) | 2023.04.05 |