SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight/WPFで使える逆引きTips集

Silverlight/WPFで使える逆引きTips集
――コンボボックス機能

(5) ComboBoxコントロール

2. 1つの項目に複数のコンテントを含める

 ComboBox コントロールでは、1つの項目に複数のコンテントを含めることができます。

 例えば、1つの項目を画像とテキストで構成することが可能です。

 しかし、項目を表す ComboBoxItem 要素は、1つコンテントしか格納することができないので、StackPanel 等のコンテナとなり得るコントロールを1つ配置し、その中に複数のコントロールを置きます。

 下記は、1つの項目に複数のコンテントを含める例です。

1つの項目に複数のコンテントを含める例
1つの項目に複数のコンテントを含める例
XAMLの例
<ComboBox>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image Source="./Images/japan.gif" Height="16" Margin="3"/>
            <TextBlock VerticalAlignment="Center">日本</TextBlock>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image Source="./Images/usa.gif" Height="16" Margin="3"/>
            <TextBlock VerticalAlignment="Center">アメリカ</TextBlock>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image Source="./Images/canada.gif" Height="16" Margin="3"/>
            <TextBlock VerticalAlignment="Center">カナダ</TextBlock>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image Source="./Images/korea.gif" Height="16" Margin="3"/>
            <TextBlock VerticalAlignment="Center">韓国</TextBlock>
        </StackPanel>
    </ComboBoxItem>
    <ComboBoxItem>
        <StackPanel Orientation="Horizontal">
            <Image Source="./Images/taiwan.gif" Height="16" Margin="3"/>
            <TextBlock VerticalAlignment="Center">台湾</TextBlock>
        </StackPanel>
    </ComboBoxItem>
</ComboBox>
VBの例
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    Dim stp As New StackPanel   'StackPanel
    Dim bi As New BitmapImage   'BitmapImage
    Dim jpnImage As New Image   'Image
    Dim tbName As New TextBlock 'TextBlock

    'StackPanelの設定(水平方向)
    stp.Orientation = Orientation.Horizontal

    'Imageの設定
    bi.BeginInit()
    bi.UriSource = New Uri("Images/Japan.gif", UriKind.Relative)
    bi.EndInit()
    jpnImage.Source = bi
    jpnImage.Height = 20
    jpnImage.Width = 32

    'TextBlockの設定
    tbName.Text = "日本"

    'StackPanelにImageとTextBlockを追加
    stp.Children.Add(jpnImage)
    stp.Children.Add(tbName)

    '作成したアイテムをComboBoxコントロールに追加
    ComboBox1.Items.Add(stp)
End Sub
C#の例
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    StackPanel stp = new StackPanel();      // StackPanel
    BitmapImage bi = new BitmapImage();     // BitmapImage
    Image jpnImage = new Image();           // Image
    TextBlock tbName = new TextBlock();     // TextBlock

    // StackPanel の設定(水平方向)
    stp.Orientation = Orientation.Horizontal;

    // Image の設定
    bi.BeginInit();
    bi.UriSource = new Uri("./Images/japan.gif", UriKind.Relative);
    bi.EndInit();
    jpnImage.Source = bi;
    jpnImage.Height = 20;
    jpnImage.Width = 32;

    // TextBlock の設定
    tbName.Text = "日本";

    // StackPanelにImageとtextBlockを追加
    stp.Children.Add(jpnImage);
    stp.Children.Add(tbName);

    // 作成したアイテムをComboBoxコントロールに追加
    comboBox1.Items.Add(stp);
}
ポイント

 1つの項目に複数のコンテントを含めるには StackPanel のようなコンテナとなり得るコントロールを1つ配置し、その中に複数のコントロールを配置する。

次のページ
3. 項目を挿入する

この記事は参考になりましたか?

Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5603 2010/12/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー