WPFのControlTemplate
とDataTemplate
の違いは何ですか?WPFのコントロールテンプレートとDataTemplateの違い
答えて
通常、コントロールは、それ自身のためにレンダリングされ、基礎となるデータを反映しません。たとえば、Button
はビジネスオブジェクトにバインドされません。そのオブジェクトはクリックされています。しかし、ContentControl
またはListBox
は、一般に、ユーザーにデータを提示できるように表示されます。
DataTemplate
は、基になるデータに視覚的な構造を提供するために使用され、ControlTemplate
は基本データとは無関係であり、コントロール自体にビジュアルレイアウトを提供します。
ControlTemplate
は一般のみDataTemplate
がDataContext
(ビジネス/ドメイン・オブジェクトまたはビュー・モデル)の特性に結合する、標準的な結合式を含むであろうが、バック・コントロール自体のプロパティに結合、TemplateBinding
式を含むことになります。
非常に基本的にControlTemplate
は、コントロールを表示する方法を説明し、DataTemplate
は、データを表示する方法を説明しています。例えば
:
Label
はコントロールであり、Label
は一部のコンテンツの周りにBorder
(DataTemplate
または他のコントロール)を使用して表示されなければならないと言うControlTemplate
を含むであろう。
Customer
クラスがデータであり、名前と他の表示電話番号を示す2 TextBlocks
つを含むStackPanel
としてCustomer
タイプを表示するように言うことができDataTemplate
を用いて表示されます。すべてのクラスがDataTemplates
を使用して表示されていることに注意してください。TextBlock
のデフォルトテンプレートを使用し、Text
プロパティをオブジェクトのToString
メソッドの結果に設定します。
ControlTemplate
- 要素の外観を変更します。例えば、Button
は、画像とテキストを含むことができます。
DataTemplate
- 要素を使用して基礎データを表します。
ControlTemplate
:コントロールスタイルを表します。
DataTemplate
:データスタイル(データの表示方法)を表します。
すべてのコントロールは、テンプレートプロパティでオーバーライドできるデフォルトのコントロールテンプレートを使用しています。
例えば
Button
テンプレートは、コントロールテンプレートです。 Button
コンテンツテンプレートDataTemplate
は、データ項目の外観を置き換え、
<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");
}
}
TroelsラーセンはMSDN forum
<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>
1000語に相当するコード –
ControlTemplate
外観を定義する上で優れた説明を持つデータテンプレートです。
例:私は、長方形から円形の形=>コントロールテンプレートにボタンを表示したいです。
コントロールに複雑なオブジェクトがある場合は、ToString()
を呼び出して表示し、DataTemplate
と表示して、データオブジェクトの値を表示および変更できます。
- 1. WPF GroupBoxコントロールテンプレート
- 2. WPFは、コントロールテンプレート
- 3. WPF WrapPanel/StackPanelとDataTemplate?
- 4. WPFのツリービューのDataTemplate
- 5. datatemplateと "メイン"グリッドのusercontrolの違い
- 6. WPF +動画+のDataTemplate
- 7. WPFはDataTemplateを
- 8. WPF GridViewColumn.CellTemplate DataTemplate ContentPresenter
- 9. WPF:プログラムで定義コントロールテンプレート
- 10. WPF:コントロールテンプレートの名前スコープの問題
- 11. DataTemplate WPFのスタイルセッターでのバインド
- 12. WPF AutoCompleteBoxスタイルのDataTemplateバインドValueMemberPath
- 13. WPF Heirachical DataTemplate in TreeView
- 14. WPFでコントロールテンプレートを派生(展開)する
- 15. WPF ImageBrushをProgressBarコントロールテンプレートでアニメーション化
- 16. ItemTemplateのDataTemplateのItemContainerStyleのWpfバインドプロパティ
- 17. WPF DataTemplateを再利用
- 18. WPF DataTemplate、TemplateSelectors、ContentPresenter SelectedItemに基づいて
- 19. TextBlockのハイパーリンク用のWPF - DataTemplate/Value Converter
- 20. DataTemplate内のMenuItem内のWPF - コマンド
- 21. WPFバインドGridViewColumn.CellTemplateのDataTemplate内のUserControlプロパティ
- 22. WPF:どのように私はDataTemplateを
- 23. wpfデータvaliationコントロールテンプレート - 複数のページで使用すると反映されない
- 24. WPFコントロールテンプレートによるクリック時のButto DropShadowEffectの削除
- 25. wpf実行時にコントロールテンプレートが動作しない
- 26. WPF DataGridのEnableRowVirtualizationとVirtualizingStackPanel.IsVirtualizingプロパティの違い
- 27. WPFのリストビューとDataGridの違いは?
- 28. トリガーとvisualStateManagerのWPFテンプレートの違い
- 29. Telerik WPFテーマのコントロールテンプレートの一部をオーバーライドすることはできますか?
- 30. WPFコントロールテンプレート:Why TargetTypeが必要なのはなぜですか?
それは意味がありましたか?技術的なものではなく、哲学的な違いを説明しようとしていると思います。 –