1

我知道,如果一个人有一个列表框,那么可以很容易地向其中添加项目,如下所示:

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 的数组,并且对于我添加到 listBox 的每个 guid 项。即

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

然后根据选择的 guid 做出不同的反应?

还有一件事,一个样式的listBox Items 怎么样?除了它们只是显示为彼此堆叠的无聊字符串之外?

提前致谢!

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 控件将根据您的 guids 集合的内容自动更新。

要处理 ListBox 中某个项目的单击事件,您需要处理控件的 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 中的每个项目设置样式。那是另一个问题。首先将您的 ListBox 绑定到您的数据源(在本例中为 GUID 集合)。

然后在 XAML 中可以自由设计 ListBox 的内容。使用 ListBox 的 ItemTemplate 和 DateTemplate。在模板中,您可以指定 ListBox 应为每个项目呈现的内容。

让我们为每个项目渲染一个 1x1 网格中的 TextBlock。只需将 TextBlock 的 Text 属性绑定到 ListBox 项的属性之一。

<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 回答