業務のためのC#・C言語・C++学習

主にC#の文法やWPF周りのアウトプットに利用してます。

【C#-WPF】DataTemplateでコントロールのContentをカスタマイズするには

WPFを開発するうえでDataTemplateは必要なわけではない。しかし、DataTemplateを利用するとWPFの外観をより柔軟性をもってカスタマイズできるになり非常に便利になる。DataTemplateは、データ オブジェクトのビジュアル構造と定義されるがここで詳細に解説する。

DataTemplateのざっとしたイメージ

ButtonやCheckBoxといったコントロールには、ContentとContentでない部分に分類されます。
DataTemplateとはContentの外観を変更する機能のことである。

Contentでない部分を変更する場合はこちらを参照してください。 gaishiengineer.hatenablog.com

CheckBoxを用いたDataTemplateの例

CheckBoxのContentをDataTemplateでカスタマイズしていく。

サンプルコード

<Window x:Class="DataTemplate0.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DataTemplate0"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate x:Key="CheckBoxDataTemplate">
            <TextBlock Text="AAA"/>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <Grid>
            <CheckBox Margin="10,10,421.4,275.8" ContentTemplate="{StaticResource CheckBoxDataTemplate}"/>
        </Grid>
    </Grid>
</Window>

出力結果 解説 リソース内でDataTemplateを定義。
CheckBoxがDataTemplateを利用できるようにx:Key属性でインスタンスを設定。DataTemplate内ではTextBlockを配置して"AAA"のテキストが出力されるようにした。
利用者のCheckBoxはContentTemplateを用いDataTemplateを利用する。