从 ItemsControl 继承的控件包含一个对象集合。 ItemsControl 的一个示例是 ListBox。可以使用 ItemsSource 属性或 Items 属性来填充一个 ItemsControl。
使用ItemSource属性
使用ItemSource属性,需将其绑定到一个实现IEnumerable接口的类型的实例上,系统会枚举其成员做为ItemsControl的Item。如在一个ListBox中列出系统的所有字体,并在每一项中显示字体的样式(类似于Office系列中的字体下拉菜单):
<Window x:Class="WPFControlContentModule.winItemsControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Items Control" Height="300" Width="300">
Grid>
<ListBox x:Name="lstFont"/>
</Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media;
namespace WPFControlContentModule
{
/// <summary>
/// Interaction logic for winItemsControl.xaml
/// </summary>
public partial class winItemsControl : Window
{
public winItemsControl()
{
InitializeComponent();
// 设置绑定的数据源
Binding binding = new Binding();
binding.Source = Items; ??
// 绑定
lstFont.SetBinding(ListBox.ItemsSourceProperty, binding);
}
private List<TextBlock> Items
{
Get
{
List<TextBlock> result = new List<TextBlock>();
// 遍历系统的所有字体
foreach (FontFamily family in Fonts.SystemFontFamilies)
{
foreach (KeyValuePair<XmlLanguage, string> pair in family.FamilyNames)
{
TextBlock t = new TextBlock();
// 设置字体名称
t.Text = pair.Value;
// 设置字体样式
t.FontFamily = family;
t.FontSize = 12;
result.Add(t);
}
}
// 返回一个TextBlock的控件对象集合
return result;
}
}
}
}
使用Items属性
随 WPF 附带的每个 ItemsControl 具有一个对应的类,该类代表 ItemsControl 中的一个项。下表列出了随 WPF 附带的 ItemsControl 对象及其相应的项容器。
ItemsControl 项容器
ComboBox ComboBoxItem
ContextMenu MenuItem
ListBox ListBoxItem
ListView ListViewItem
Menu MenuItem
StatusBar StatusBarItem
TabControl TabItem
TreeView TreeViewItem
在做相应的项的时候可以有三种做法:
<!--方法一-->
<ListBox>
<ListBox.Items>
<ListBoxItem>
Item A
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="Item B" />
</ListBoxItem>
</ListBox.Items>
</ListBox>
<!--方法二,省略ListBox.Items-->
<ListBox>
<ListBoxItem>
Item A
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="Item B" />
</ListBoxItem>
</ListBox>
<!--方法三,省略ListBoxItem-->
<ListBox>
<ListBox.Items>
Item A
<TextBlock Text="Item B" />
</ListBox.Items>
</ListBox>
使用ItemSource属性
使用ItemSource属性,需将其绑定到一个实现IEnumerable接口的类型的实例上,系统会枚举其成员做为ItemsControl的Item。如在一个ListBox中列出系统的所有字体,并在每一项中显示字体的样式(类似于Office系列中的字体下拉菜单):
<Window x:Class="WPFControlContentModule.winItemsControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Items Control" Height="300" Width="300">
Grid>
<ListBox x:Name="lstFont"/>
</Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media;
namespace WPFControlContentModule
{
/// <summary>
/// Interaction logic for winItemsControl.xaml
/// </summary>
public partial class winItemsControl : Window
{
public winItemsControl()
{
InitializeComponent();
// 设置绑定的数据源
Binding binding = new Binding();
binding.Source = Items; ??
// 绑定
lstFont.SetBinding(ListBox.ItemsSourceProperty, binding);
}
private List<TextBlock> Items
{
Get
{
List<TextBlock> result = new List<TextBlock>();
// 遍历系统的所有字体
foreach (FontFamily family in Fonts.SystemFontFamilies)
{
foreach (KeyValuePair<XmlLanguage, string> pair in family.FamilyNames)
{
TextBlock t = new TextBlock();
// 设置字体名称
t.Text = pair.Value;
// 设置字体样式
t.FontFamily = family;
t.FontSize = 12;
result.Add(t);
}
}
// 返回一个TextBlock的控件对象集合
return result;
}
}
}
}
使用Items属性
随 WPF 附带的每个 ItemsControl 具有一个对应的类,该类代表 ItemsControl 中的一个项。下表列出了随 WPF 附带的 ItemsControl 对象及其相应的项容器。
ItemsControl 项容器
ComboBox ComboBoxItem
ContextMenu MenuItem
ListBox ListBoxItem
ListView ListViewItem
Menu MenuItem
StatusBar StatusBarItem
TabControl TabItem
TreeView TreeViewItem
在做相应的项的时候可以有三种做法:
<!--方法一-->
<ListBox>
<ListBox.Items>
<ListBoxItem>
Item A
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="Item B" />
</ListBoxItem>
</ListBox.Items>
</ListBox>
<!--方法二,省略ListBox.Items-->
<ListBox>
<ListBoxItem>
Item A
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="Item B" />
</ListBoxItem>
</ListBox>
<!--方法三,省略ListBoxItem-->
<ListBox>
<ListBox.Items>
Item A
<TextBlock Text="Item B" />
</ListBox.Items>
</ListBox>