2011-04-12 45 views
1

我想改变代码行中的行数据网格的背景颜色我在代码中使用绑定属性 behing我看到颜色的变化,但是当显示背景颜色不变时。 当我和滚动我一些Datagrid rowbackground color

回答

0

标题颜色变化的发挥:

With datagrid1 
.ColumnHeadersDefaultCellStyle.Font = New Font("Arial", 12.0F, FontStyle.Bold, GraphicsUnit.Pixel) 
.ColumnHeadersDefaultCellStyle.BackColor = Color.GreenYellow 
.EnableHeadersVisualStyles = False 
End With 

行和背景颜色变化

With datagrid1 
.RowsDefaultCellStyle.BackColor = Color.Beige 
.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(224, 255, 179) 
.DefaultCellStyle.Font = New Font("Arial", 12.0F, FontStyle.Regular, GraphicsUnit.Pixel) 
End With 

改变这样的。我希望它的帮助,你

+0

我需要certin行根据certin条件进行更改 – user609447 2011-04-12 08:11:10

0

完整的行:

datagrid1.Rows(0).DefaultCellStyle.BackColor = Color.Beige 

完全柱:

datagrid1.Columns(0).DefaultCellStyle.BackColor = Color.Yellow 

随着条件和

If (dataset1.Tables(0).Rows(1)(0) == "") Then 
    datagrid1.Rows(0).Cells(1).Style.BackColor = Color.Red 
End if 
0

我创建了一个样本CustomClass特定的细胞:

public class CustomClass 
    { 
     public string PropertyToBeWatched { get; set; } 
    } 

创建一个列表:

MyList = new ObservableCollection<CustomClass>(); 
      MyList.Add(new CustomClass() { PropertyToBeWatched = "1"}); 
      MyList.Add(new CustomClass() { PropertyToBeWatched = "2" }); 
      MyList.Add(new CustomClass() { PropertyToBeWatched = "2" }); 
      MyList.Add(new CustomClass() { PropertyToBeWatched = "2" }); 

然后创建Datagrid的:

<sdk:DataGrid ItemsSource="{Binding MyList}" RowStyle="{StaticResource Style1}"> 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTextColumn Binding="{Binding PropertyToBeWatched}" Header="Property1"/> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 

然后资源:

xmlns:sdk1="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
      xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 


<SolidColorBrush x:Key="Red" Color="#FFFF0000" /> 
     <SolidColorBrush x:Key="Green" Color="#FF00FF00" />  

     <Style x:Key="Style1" TargetType="sdk:DataGridRow"> 
      <Setter Property="IsTabStop" Value="False"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="sdk:DataGridRow"> 
         <Grid Background="{Binding Converter={StaticResource Test}}"> 
          <sdk1:DataGridFrozenGrid x:Name="Root"> 
           <sdk1:DataGridFrozenGrid.Resources> 
            <Storyboard x:Key="DetailsVisibleTransition"> 
             <DoubleAnimation Duration="00:00:0.1" Storyboard.TargetProperty="ContentHeight" Storyboard.TargetName="DetailsPresenter"/> 
            </Storyboard> 
           </sdk1:DataGridFrozenGrid.Resources> 
              <sdk1:DataGridFrozenGrid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition/> 
          </sdk1:DataGridFrozenGrid.ColumnDefinitions> 
           <sdk1:DataGridFrozenGrid.RowDefinitions> 
            <RowDefinition/> 
            <RowDefinition Height="Auto"/> 
            <RowDefinition Height="Auto"/> 
           </sdk1:DataGridFrozenGrid.RowDefinitions> 
                                                        <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="NormalAlternatingRow"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="MouseOver"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="NormalSelected"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="MouseOverSelected"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="UnfocusedSelected"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundRectangle"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="UnfocusedEditing"/> 
            <VisualState x:Name="NormalEditing"/> 
            <VisualState x:Name="MouseOverUnfocusedEditing"/> 
            <VisualState x:Name="MouseOverEditing"/> 
            <VisualState x:Name="MouseOverUnfocusedSelected"/> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="ValidationStates"> 
            <VisualState x:Name="Valid"/> 
            <VisualState x:Name="Invalid"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="BackgroundRectangle"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> 
              </ObjectAnimationUsingKeyFrames> 
              <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="InvalidVisualElement"/> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
           <Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="2" Fill="Red" Opacity="0" Grid.RowSpan="2"/> 
           <Rectangle x:Name="InvalidVisualElement" Grid.ColumnSpan="2" Fill="#FFF7D8DB" Opacity="0" Grid.RowSpan="2"/> 
           <sdk1:DataGridRowHeader x:Name="RowHeader" sdk1:DataGridFrozenGrid.IsFrozen="True" Grid.RowSpan="3"/> 
           <sdk1:DataGridCellsPresenter x:Name="CellsPresenter" Grid.Column="1" sdk1:DataGridFrozenGrid.IsFrozen="True"/> 
           <sdk1:DataGridDetailsPresenter x:Name="DetailsPresenter" Grid.Column="1" Grid.Row="1"/> 
           <Rectangle x:Name="BottomGridLine" Grid.Column="1" HorizontalAlignment="Stretch" Height="1" Grid.Row="2"/> 
          </sdk1:DataGridFrozenGrid> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

,这是转换器:

public class RowStyleConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (((CustomClass)value).PropertyToBeWatched == "1") 
       return App.Current.Resources["Red"] as SolidColorBrush; 
      else 
       return App.Current.Resources["Green"] as SolidColorBrush; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new System.NotImplementedException(); 
     } 
    } 

它基本上根据属性“PropertyToBeWatched”获取并设置solidcolorbrush。

希望这有助于