В то время как Визуальный SVN стоит приблизительно $50, я сильно предпочитаю его по AnkhSVN (который я в последний раз попробовал приблизительно год назад - это, возможно, улучшилось с тех пор).
Это - один из самых легких, чтобы продать Вашему боссу, если финансирование является проблемой. (К счастью мы не должны царапать и хватать для получения хороших инструментов, где я работаю.)
Вы можете обработать событие LoadingRow DataGrid, чтобы определить, когда добавляется строка. В обработчике событий вы можете получить ссылку на DataRow, который был добавлен в DataTable, который действует как ваш ItemsSource. Затем вы можете обновить цвет DataGridRow, как вам нравится.
void dataGrid_LoadingRow(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
{
// Get the DataRow corresponding to the DataGridRow that is loading.
DataRowView item = e.Row.Item as DataRowView;
if (item != null)
{
DataRow row = item.Row;
// Access cell values values if needed...
// var colValue = row["ColumnName1]";
// var colValue2 = row["ColumName2]";
// Set the background color of the DataGrid row based on whatever data you like from
// the row.
e.Row.Background = new SolidColorBrush(Colors.BlanchedAlmond);
}
}
Чтобы подписаться на мероприятие в XAML:
<toolkit:DataGrid x:Name="dataGrid"
...
LoadingRow="dataGrid_LoadingRow">
Или в C #:
this.dataGrid.LoadingRow += new EventHandler<Microsoft.Windows.Controls.DataGridRowEventArgs>(dataGrid_LoadingRow);
У меня был тот же самый вопрос, и я понял его, сделав минимальный тест и некоторые дедуктивные рассуждения!
В основном решением является ALWAYS убедитесь, что задан цвет фона (или любой стиль на самом деле). Не принимайте значения по умолчанию для стиля строк . Я предполагал, что значение по умолчанию для белого, которое является разумное предположение, но на самом деле это не так.
Подробнее:
Похоже, среда выполнения повторно использует экземпляры класса Row при визуализации нескольких строк. Я вообще не проверял это, но судя по симптомам, это кажется, что это происходит.
У меня была только одна или две строки, которые должны быть окрашены по-разному. Я видел случайно окрашенные строки при прокрутке вверх и вниз.
Вот мой тест класса i сделано. Каждая пятая строка должна быть красной и курсивной.
Вы увидите пару строк с комментариями (которые задают значение по умолчанию, отличное от курсива и белого фона). С этими комментариями - если прокрутить вверх и вниз, вы увидите много красного!! Это происходит потому, что объекты строк используются повторно. Если сделать окно меньше, а затем максимизировать его часть белого вернется. Возможно, сборщик мусора, собирающий строки, не думает, что вам понадобится больше после того, как окно уменьшится.
Как я сказал выше, решение состоит в том, чтобы всегда указывать стили для значений по умолчанию и не принимать какие-либо значения по умолчанию.
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
dataGrid1.ItemsSource = Enumerable.Range(0, 50).Select(x => new Person()
{
FirstName = "John",
LastName = "Smith",
ID = x,
Delinquent = (x % 5 == 0) // every fifth person is 'delinquent'
});
}
private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
var person = (Person)e.Row.DataContext;
if (person.Delinquent)
{
e.Row.Background = new SolidColorBrush(Colors.Red);
e.Row.Foreground = new SolidColorBrush(Colors.White);
e.Row.FontStyle = FontStyles.Italic;
}
else
{
// defaults - without these you'll get randomly colored rows
// e.Row.Background = new SolidColorBrush(Colors.Green);
// e.Row.Foreground = new SolidColorBrush(Colors.Black);
// e.Row.FontStyle = FontStyles.Normal;
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public bool Delinquent { get; set; }
}
}
-121--3895006- Если вы используете PHP 5.3 +, это поможет вам, поместите его в самую верхнюю часть страницы:
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}
Обрабатывает клавиши, значения и многомерные массивы.
-121--1170067-ВАЖНО : всегда назначьте значения по умолчанию для строк, не окрашенных условием, или любого другого стиля.
Смотрите мой ответ на C # Silverlight Datagrid - Row Color Change .
PS. Я в Silverlight и не подтвердил это поведение в WPF