Вдохновленный реализацией @ dicegiuy30, я хотел создать версию, которая перебирает исходный код только один раз и не создает полный набор результатов в памяти для компенсации. Лучшее, что я придумал, это:
public static IEnumerable<IEnumerable<T>> Split2<T>(this IEnumerable<T> source, int chunkSize) {
var chunk = new List<T>(chunkSize);
foreach(var x in source) {
chunk.Add(x);
if(chunk.Count <= chunkSize) {
continue;
}
yield return chunk;
chunk = new List<T>(chunkSize);
}
if(chunk.Any()) {
yield return chunk;
}
}
Таким образом, я строю каждый блок по требованию. Хотел бы я также избегать List<T>
и просто транслировать это, но пока не понял этого.
Внутри желаемого события вы можете установить цвет фона следующим образом ...
// Change the background color of button1 to Blue
button1.Background = Brushes.Blue;
Вы также можете установить это в триггере:
<!-- Button will change from Blue to Yellow on MouseOver -->
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
Для получения более подробной информации , ознакомьтесь с разделом Триггеры свойств в этой статье.