1

listBoxがあれば、次のようなことで簡単にアイテムを追加できることを理解しています。

ListBox myList = new ListBox();
myList.Items.Add("Added Item 1");
myList.Items.Add("Added Item 2");
myList.Items.Add("Added Item 3");

最初はリストに追加されるアイテムの数がわからないため、ここで行うように静的コンテンツを追加しません。forループを繰り返し、その方法でアイテムを追加します。先に進む...

リストボックスにアイテムを追加するだけでなく、各アイテムをクリック可能にする方法を教えてください。たとえば、12個のGUIDの配列があり、各GUIDアイテムについてlistBox.ieに追加するとします。

myList.Items.Add(guidArray[i]);

そして、どのGUIDが選択されたかによって、反応が異なりますか?

そしてもう1つ、1つのスタイルのlistBoxアイテムはどのようになっていますか?それら以外は、互いに積み重ねられた退屈なストリングとして表示されますか?

前もって感謝します!

4

1 に答える 1

4

GUIDのコレクションがあるとします。

var guids = new List<Guid>();
for (var i = 0; i < 12; i++)
{
    guids.Add(Guid.NewGuid());
}

次に、このコレクションをListBoxコントロールにバインドできます。

myList.ItemsSource = guids;

ListBoxコントロールは、GUIDコレクションの内容に応じて自動的に更新されます。

リストボックス内のアイテムのクリックイベントを処理するには、コントロールのSelectionChangedイベントを処理する必要があります。

イベントハンドラーを接続します。

<ListBox Name="MyList" 
         SelectionChanged="MyList_SelectionChanged">
...
</ListBox>

これで、イベントハンドラーに必要なコードを記述できます。

private void MyList_SelectionChanged(object sender, 
    System.Windows.Controls.SelectionChangedEventArgs e)
{
    // Find out which item was clicked
    if (e.AddedItems.Count > 0)
    {
        var myGuid = e.AddedItems[0] as Guid;
        if (myGuid == null)
            return;
        // ...
    }
}

リストボックス内の各アイテムのスタイルを設定します。それはまったく別の質問です。ListBoxをデータソース(この場合はGUIDコレクション)にバインドすることから始めます。

次に、XAMLで、リストボックスの内容を自由に設計できます。ListBoxのItemTemplateとDateTemplateを使用します。テンプレートでは、リストボックスが各アイテムに対して何をレンダリングするかを指定できます。

アイテムごとに1x1グリッドでTextBlockをレンダリングしてみましょう。TextBlockのTextプロパティをListBoxアイテムのプロパティの1つにバインドするだけです。

<ListBox Name="MyList" 
     SelectionChanged="MyList_SelectionChanged">
    <ListBox.ItemTemplate>
       <DataTemplate>               
           <Grid>
               <Grid.ColumnDefinitions>
                   <ColumnDefinition Width="*" />
                   <ColumnDefinition Width="*" />
               </Grid.ColumnDefinitions>

               <Grid.RowDefinitions>
                   <RowDefinition Height="*" />
               </Grid.RowDefinitions>

               <TextBlock Grid.Column="1" Text="{Binding ...}" />
           </Grid> 
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
于 2012-06-25T11:14:36.120 に答える