В ASP.NET часто пишут такой код:
foreach(DataListItem item in theDataList.Items){
MyUserControl foo = item.FindControl("myUserControl") as MyUserControl;
foo.DoSomethingNice();
}
В Silverlight, как можно перебирать составляющие элементы управления DataGrid (или другого элемента управления, связанного с коллекцией)? Я хотел бы установить непрозрачность для каждого из них примерно на 0,5, а затем, когда они обрабатываются, обновить непрозрачность до 1.
Используя свойство ItemSource, можно получить ссылку на базовый IEnumerable, который привязан, но я бы хотел фактическую ссылку на элемент управления.
Чтобы сделать это более конкретным, предположим, что у вас есть пользовательский элемент управления, подобный этому:
<UserControl x:Class="GridTest.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="Auto" Height="25">
<StackPanel Orientation="Horizontal">
<TextBox Width="150" Text="{Binding FirstName}" />
<TextBox Width="150" Text="{Binding LastName}" />
</StackPanel>
</UserControl>
Ваш шаблон DataGrid выглядит так:
<data:DataGrid x:Name="theDataGrid">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn Header="People" Width="Auto">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<this:TestControl />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
Вы связываете так:
theDataGrid.AutoGenerateColumns = false;
people = new List<Person>(
new Person[]{
new Person { FirstName = "John", LastName = "Carmack" },
new Person { FirstName = "Linus", LastName = "Torvalds" }
}
);
theDataGrid.ItemsSource = people;