Мне нравится XAMPP, лично. У меня есть установка, работающая на карте флэш-памяти, которую я ношу вокруг, это - в значительной степени моя среда разработки для сети ЛАМПЫ dev на любой машине, которая я, оказывается, в (я нахожусь главным образом на клиентских машинах Windows).
Маленький, полностью функциональный, и стабильный - работает действительно хорошо на мои потребности.
Это делается с помощью стилей и триггеров данных. Просто установите ElementStyle со свойством фона по умолчанию, в данном случае Green, и добавьте DataTriggers для других случаев:
<DataGridTextColumn Binding="{Binding WhateverIWantToDisplay}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="Green" />
<Style.Triggers>
<DataTrigger Binding="{Binding Foo}" Value="1">
<Setter Property="Background" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding Foo}" Value="2">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Foo}" Value="2">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Другой подход - использовать привязку с конвертером:
<DataGridTextColumn Binding="{Binding WhateverIWantToDisplay}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background"
Value="{Binding Foo, Converter={x:Static my:FooToColorConverter.Instance}}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
с этим конвертером:
public class FooToColorConverter : IValueConverter
{
public static readonly IValueConverter Instance = new FooToColorConverter();
public object Convert(object value, ...
{
int foo = (int)value;
return
foo==1 ? Brushes.Blue :
foo==2 ? Brushes.Red :
foo==3 ? Brushes.Yellow :
foo>3 ? Brushes.Green :
Brushes.Transparent; // For foo<1
}
public object ConvertBack(...
{
throw new NotImplementedException();
}
}
Обратите внимание, что ответ serge_gubenko дал также будет работать, но только если значение вашего свойства Foo никогда не изменяется. Это потому, что геттер свойства Color будет вызываться только один раз. Его решение можно улучшить, изменив Color на DependencyProperty, доступное только для чтения, и обновив его всякий раз, когда назначается Foo, но, как правило, иметь в модели данных специфичную для пользовательского интерфейса информацию, такую как цвета, - плохая идея, поэтому это не рекомендуется.
Один из способов сделать это - определить ElementStyle для столбца и затем привязать фон текстового блока к свойству цвета элемента данных за строкой таблицы данных. Вот пример:
DataGridTextColumn xaml:
<DataGridTextColumn Width="SizeToCells"
MinWidth="150"
Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextBlock.Background" Value="{Binding Color}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
объявление элемента данных:
public class TestItem
{
public TestItem(int foo)
{
Foo = foo;
}
public int Foo { get; set; }
public Brush Color
{
get
{
Color color = Colors.Green;
switch (Foo)
{
case 1: color = Colors.Red; break;
case 2: color = Colors.Yellow; break;
}
return new SolidColorBrush(color);
}
}
}
надеюсь, что это поможет, касается