如何访问datatemplate生成的列表框中的特定控件

时间:2015-08-08 17:45:40

标签: c# wpf

所以我有dataTemplate生成的列表框如下:

<ListBox.ItemTemplate>
    <DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Rectangle Fill="{Binding color}" Height="10" Width="10" Grid.Column="1"/>
        <TextBlock Text=" " Grid.Column="2"/>
        <TextBlock Text="{Binding ID}" FontSize="10" FontWeight="Bold" Grid.Column="3"/>
    </Grid>
    </DataTemplate>
</ListBox.ItemTemplate
  

我将它绑定到ObservableCollection。我需要访问此列表框中的特定项目并更改其矩形元素的颜色。

1 个答案:

答案 0 :(得分:0)

我会使用StyleSelector。制作一个像这样的样式选择器:

<强> ListViewItemStyleSelector.cs

public class ListViewItemStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, 
         DependencyObject container)
    {
         Style st = new Style();
         st.TargetType = typeof(ListViewItem);
         Setter backGroundSetter = new Setter();
         backGroundSetter.Property = ListViewItem.BackgroundProperty;
         ListView listView = 
             ItemsControl.ItemsControlFromItemContainer(container) 
              as ListView;
        int index = 
        listView.ItemContainerGenerator.IndexFromContainer(container);
        if (index % 2 == 0)    <-- here your own criteria
        {
            backGroundSetter.Value = Brushes.LightBlue;
        }
        else
        {
            backGroundSetter.Value = Brushes.Beige;
        }
        st.Setters.Add(backGroundSetter);
        return st;
    }  
 }    

使用styleselector

<强> XAML

<ListView 
      ItemsSource="{Binding Source={StaticResource EmployeeData}, 
                                    XPath=Employee}"
      ItemContainerStyleSelector="{DynamicResource myStyleSelector}" >      
  <ListView.View>
    <GridView>
      <GridViewColumn DisplayMemberBinding="{Binding XPath=FirstName}" 
                  Header="First Name" Width="120"/>
      <GridViewColumn DisplayMemberBinding="{Binding XPath=LastName}" 
                  Header="Last Name" Width="120"/>
      <GridViewColumn DisplayMemberBinding="{Binding XPath=FavoriteCity}" 
                  Header="Favorite City" Width="120"/>
    </GridView>
    </ListView.View>
</ListView>