据我所知,如果有一个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 .i.e。
myList.Items.Add(guidArray[i]);
然后根据选择的guid做出不同的反应?
另外一件事,一个样式listBox项目怎么样?除了他们只是表现为相互堆叠的无聊的弦?
提前致谢!
答案 0 :(得分: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中项目的click事件,您需要处理控件的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>