将ComboBox绑定到数据源时,通常需要访问ComboBoxItem以执行某个操作。 可以通过使用ItemContainerGenerator来获取ComboBoxItem。
Xaml代码如下:
<
Grid
>
< ComboBox Height ="40" Margin ="52,59,66,0" Name ="cbTest" VerticalAlignment ="Top" IsSynchronizedWithCurrentItem ="True" SelectionChanged ="cbTest_SelectionChanged" ItemsSource =" {Binding} " >
< ComboBox.ItemTemplate >
< DataTemplate >
< TextBlock Text =" {Binding Path=Name} " />
</ DataTemplate >
</ ComboBox.ItemTemplate >
</ ComboBox >
</ Grid >
后台代码:
< ComboBox Height ="40" Margin ="52,59,66,0" Name ="cbTest" VerticalAlignment ="Top" IsSynchronizedWithCurrentItem ="True" SelectionChanged ="cbTest_SelectionChanged" ItemsSource =" {Binding} " >
< ComboBox.ItemTemplate >
< DataTemplate >
< TextBlock Text =" {Binding Path=Name} " />
</ DataTemplate >
</ ComboBox.ItemTemplate >
</ ComboBox >
</ Grid >
public
partial
class
Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Family family = new Family();
for (int i = 0; i < 10; i++)
{
Person p = new Person();
p.Name = "Name" + i.ToString();
family.Add(p);
}
this.cbTest.DataContext = family;
}
private void cbTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//通过如下代码得到ComboBoxItem,然后对其进行操作
ComboBoxItem cbItem = (ComboBoxItem)this.cbTest.ItemContainerGenerator.ContainerFromIndex(this.cbTest.SelectedIndex);
if (cbItem != null)
{
cbItem.Background = Brushes.Red;
}
}
}
public class Person
{
public string Name
{
get;
set;
}
}
public class Family : ObservableCollection < Person >
{ }
详见MSDN:
http://msdn2.microsoft.com/zh-cn/library/system.windows.controls.itemcontainergenerator.aspx
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Family family = new Family();
for (int i = 0; i < 10; i++)
{
Person p = new Person();
p.Name = "Name" + i.ToString();
family.Add(p);
}
this.cbTest.DataContext = family;
}
private void cbTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//通过如下代码得到ComboBoxItem,然后对其进行操作
ComboBoxItem cbItem = (ComboBoxItem)this.cbTest.ItemContainerGenerator.ContainerFromIndex(this.cbTest.SelectedIndex);
if (cbItem != null)
{
cbItem.Background = Brushes.Red;
}
}
}
public class Person
{
public string Name
{
get;
set;
}
}
public class Family : ObservableCollection < Person >
{ }