2012-03-09 3 views
4

Можно ли прикрепить стиль или определить свойство в WPF System.Windows.Controls.Grid, чтобы чередовать цвет строк (или столбцов)?Альтернативные цвета строк сетки?

Мне нужно, чтобы пользователь мог разместить место для сетки (что-то похожее на CrystalReports) ... Он может параметрировать сетку, но сетка (в представлении) не будет содержать никаких данных.

+3

«Grid» - это элемент макета - для данных, которые вы должны использовать «DataGrid», который имеет встроенную окраску строк. – ChrisF

+0

Возможный дубликат [wpf datagrid alternate row coloring] (http://stackoverflow.com/questions/4792628/wpf-datagrid-alternate-row-coloring) – V4Vendetta

+0

@ChrisF: Мне не нужны данные. Просто сетка. – serhio

ответ

4

Единственный способ, которым я могу думать делать это вручную с помощью Rectangle либо объявленную перед содержимым строки или с его Z порядок установлен, чтобы подтолкнуть его к задней:

<Grid Background="White"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Rectangle Grid.Row="0" Fill="AliceBlue" /> 
    <TextBlock Grid.Row="0" Text="Row 1" HorizontalAlignment="Center"/> 
    <Rectangle Grid.Row="1" Fill="AntiqueWhite" /> 
    <TextBlock Grid.Row="1" Text="Row 2" HorizontalAlignment="Center"/> 
    <Rectangle Grid.Row="2" Fill="AliceBlue" /> 
    <TextBlock Grid.Row="2" Text="Row 3" HorizontalAlignment="Center"/> 
    <Rectangle Grid.Row="3" Fill="AntiqueWhite" /> 
    <TextBlock Grid.Row="3" Text="Row 4" HorizontalAlignment="Center"/> 
</Grid> 

Вы могли бы быть в состоянии используйте привязки для передачи номера строки в конвертер, чтобы вернуть правильный цвет, а не жесткое кодирование, как у меня здесь.

+0

+1 потому что Grid на самом деле не отображается в виде таблицы, а вместо этого представляет собой контейнерный объект, который определяет способ рендеринга элементов, размещенных внутри него. Если в вашей Grid нет объектов, тогда нет ничего, что можно было бы использовать для рисования фона, поэтому вам нужно на самом деле размещать объекты внутри сетки, если вы хотите такого поведения. – Rachel

+0

Учитывая ваш комментарий об использовании DataGrid вместо Grid, помечен как ответ. Тем не менее, у меня есть некоторые проблемы для отображения некоторых пустых строк и столбцов в DataGrid ... Причина в том, что необходим источник данных ... – serhio

+0

@serhio - просто добавьте пустые объекты в свой DataSource. Хотя это помогло бы, если бы мы знали, чего вы пытаетесь достичь. – ChrisF

Смежные вопросы