==[[WPF コントロール]]==
[[WPF]] | [[Silverlight]] | [[.Net]] | [[Universal Windows Platform]] |
{{amazon|4798114200}}
==コンテンツモデル==
*WPFでは、ほとんどのコントロールを3つのカテゴリに分類WPFでは、ほとんどのコントロールを3つの[[カテゴリ]]に分類
{|class="wikitable"
![[カテゴリ]]
!内容
!例
|レンダコントロール
|画面にピクセルを表示する
|Rectangle、Ellipse[[R]]ectangle、Ellipse
|-
|}
panel.Children.Add(elementPresenter);
[[File:1445_wpf_content_presenter.jpg]]
====ContentPresenterがコンテンツを変換して表示するロジックContentPresenterがコンテンツを変換して表示する[[ロジック]]====#ContentがUIElement型の場合は、表示ツリーに追加ContentがU[[IE]]lement型の場合は、表示ツリーに追加#ContentTemplateが設定されている場合、それを使用してUIElementインスタンスを生成し表示ツリーに追加ContentTemplateが設定されている場合、それを使用してU[[IE]]lementインスタンスを生成し表示ツリーに追加#ContentTemplateSelectorが設定されている場合、それを使用してテンプレートを検索し、そのテンプレートを使用してUIElementインスタンスを生成し表示ツリーに追加ContentTemplateSelectorが設定されている場合、それを使用してテンプレートを検索し、そのテンプレートを使用してU[[IE]]lementインスタンスを生成し表示ツリーに追加#Contentのデータ型にデータテンプレートが関連づけられている場合、それを使用してUIElementインスタンスを作成Contentのデータ型にデータテンプレートが関連づけられている場合、それを使用してU[[IE]]lementインスタンスを作成#Contentのデータ型にUIElement型に変換可能なTypeConverterインスタンスが関連づけられている場合、Contentを変換し表示ツリーに追加Contentのデータ型にU[[IE]]lement型に変換可能なTypeConverterインスタンスが関連づけられている場合、Contentを変換し表示ツリーに追加
#Contentのデータ型に文字列変換可能なTypeConverterインスタンスが関連づけられている場合、ContentをTextBlockで包含し表示ツリーに追加
#最後にContentのToStringを呼び出し、TextBlockで包含し表示ツリーに追加
[[File:1446_wpf_imtes.jpg]]
===ChildrenおよびChild===
*UIElementの子のみをサポートU[[IE]]lementの子のみをサポート
==テンプレート==
*WPFコントロールは、プロパティを使用することによる視覚表示の大幅な制御を可能にする[[WPF]]コントロールは、プロパティを使用することによる視覚表示の大幅な制御を可能にする
*任意のコントロールの外観を完全にカスタマイズすることも可能。
*カスタマイズの範疇全体を宣言型にし一貫したプログラミングモデルを提供する、テンプレートシステム
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Rectangle [[R]]ectangle Fill="Red[[R]]ed" Width="75" Height="23"/>
</ControlTemplate>
</Button.Template>
===クリックでテンプレートを変更してみる===
private void Button_Click(object sender, RoutedEventArgs [[R]]outedEventArgs e)
{
var template = new ControlTemplate(typeof(Button));
*コンテンツプレゼンタは規定ではテンプレートが適用されるコントロールのContentプロパティの値を表示する
<StackPanel Name="MainPanel" Initialized="MainPanel_Initialized" >
<StackPanel.Resources[[R]]esources>
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border CornerRadiusCorner[[R]]adius="6" BorderThickness="4">
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0,1">
</Border>
</ControlTemplate>
</StackPanel.Resources[[R]]esources> <Button Template="{StaticResource Static[[R]]esource ButtonTemplate}" Padding="10" Margin="10">
My Button
</Button>
<blockquote>以下の例は、BorderのBorderThicknessプロパティ、BorderBrushプロパティ、およびBackgroundプロパティをテンプレートが適用されるButtonの同じプロパティにバインドします。Buttonのプロパティを設定するだけで、下図のようなボタンを作成出来ます。</blockquote>
<StackPanel Name="MainPanel" Initialized="MainPanel_Initialized" >
<StackPanel.Resources[[R]]esources>
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border CornerRadiusCorner[[R]]adius="6"
BorderThickness="{TemplateBinding Property=BorderThickness}"
BorderBrush="{TemplateBinding Property=BorderBrush}"
</Border>
</ControlTemplate>
</StackPanel.Resources[[R]]esources> <Button Template="{StaticResource Static[[R]]esource ButtonTemplate}"
Padding="10"
Margin="10"