Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

ListBoxをさらにカスタマイズする

ItemsPanelTemplateは、項目のレイアウトに使用されるパネルを指定します。それ以上のカスタマイズにはControlTemplateを使用します。

アプリ実行


ソースコード

App.xaml
<Application x:Class="HelloWorld.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="Page1.xaml">
</Application>
Page1.xaml
<Page x:Class="HelloWorld.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="Page1">
    <ListBox x:Name="listBox" Width="200" Height="100">
        <ListBox.Template>
            <ControlTemplate TargetType="{x:Type ListBox}">
                <StackPanel Background="LightBlue">
                    <!-- IsItemsHostで項目を表示するパネルを指定する -->
                    <UniformGrid IsItemsHost="True" Columns="2" />                    
                </StackPanel>
            </ControlTemplate>
        </ListBox.Template>
    </ListBox>
</Page>
Page1.xaml.cs
using System.Windows.Controls;

namespace HelloWorld {
    public partial class Page1 : Page {
        public Page1() {
            InitializeComponent();

            listBox.ItemsSource = new string[] { "佐藤", "鈴木", "渡辺", "小林", "田中" };
        }
    }
}

参考

Panel.IsItemsHost プロパティ (System.Windows.Controls)
この Panel が ItemsControl で生成されるuser interface (UI) 項目のコンテナーであることを示す値を取得または設定します。