繁体   English   中英

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

[英]how to access specific control in datatemplate generated listbox

所以我有这样的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。 我需要访问此列表框中的特定项目,并更改其矩形元素的颜色。

我将使用StyleSelector。 制作一个如下的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

a

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM