【问题标题】:Change Backcolor of cell in WPF DataGrid Selection / Deselection (WPF, VB.NET, WinForms)更改 WPF DataGrid 选择/取消选择(WPF、VB.NET、WinForms)中单元格的背景色
【发布时间】:2015-04-12 17:31:23
【问题描述】:

我有 WPF 表单,里面有一个 DataGrid。当表单加载或没有焦点时,第一个单元格上有一个白色突出显示。如果我单击 gridview 或当表单获得焦点时,当前单元格变为蓝色(我设置的选择颜色)。见图片:

'失去焦点

获得焦点

当数据网格没有焦点时,我想删除白色突出显示,即它应该看起来像该行中的其他单元格。我必须处理的属性或事件是什么?

        <DockPanel Name="DocHolder" >            
           <DataGrid x:Name="dataGrid1" MaxHeight="100" AutoGenerateColumns="False" HeadersVisibility="Column" SelectionUnit="Cell" FontSize="11" 
                 VerticalContentAlignment="Center" 
                  HorizontalGridLinesBrush="#FFC7BDBD" AlternatingRowBackground="#690BB9F8"
                  EnableColumnVirtualization="False" EnableRowVirtualization="False" GridLinesVisibility="None"
                CanUserResizeColumns="False"  CanUserResizeRows="False"  CanUserReorderColumns="False" CanUserAddRows="False"  CanUserDeleteRows="False"  
                ClipboardCopyMode="ExcludeHeader" HorizontalScrollBarVisibility="Disabled"  MinRowHeight="20"  OverridesDefaultStyle="False"
                Style="{DynamicResource scGrid}" ColumnHeaderStyle="{DynamicResource scGridHeader}">

                <DataGrid.BorderBrush> <SolidColorBrush /> </DataGrid.BorderBrush>
                <DataGrid.RowBackground> <SolidColorBrush /></DataGrid.RowBackground>
                <DataGrid.Background> <SolidColorBrush /> </DataGrid.Background>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="GID"  DisplayIndex="0" Visibility="Hidden"   Binding="{Binding GID}" />
                    <DataGridTextColumn Header="Region" DisplayIndex="1" IsReadOnly="True" Binding="{Binding AreaName}" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" />
                    <DataGridTextColumn Header="Grps"  DisplayIndex="2" IsReadOnly="True" Binding="{Binding GName}" CellStyle="{StaticResource FocusAndShowElementData}" HeaderStyle="{StaticResource HeaderStyle}" />
                    <DataGridTextColumn Header="Thk"   DisplayIndex="3" Binding="{Binding Thick}"  IsReadOnly="True" CellStyle="{StaticResource CellGotFocus}"  HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridTextColumn Header="TX"   DisplayIndex="4" Binding="{Binding TopX}" IsReadOnly="True" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridTextColumn Header="TY"   DisplayIndex="5" Binding="{Binding TopY}" IsReadOnly="True" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridTextColumn Header="BX"  DisplayIndex="6" Binding="{Binding BottomX}" IsReadOnly="True" CellStyle="{StaticResource CellGotFocus}"  HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridTextColumn Header="BY"   DisplayIndex="7" Binding="{Binding BottomY}" IsReadOnly="True" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridComboBoxColumn Header="DTX"  DisplayIndex="8" TextBinding ="{Binding BTopX, Mode=TwoWay}" x:Name="cmbBTopX" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" ElementStyle="{StaticResource scDGCombo}"/>
                    <DataGridTextColumn Header="STX"  DisplayIndex="9" Binding="{Binding BTopX, Mode=TwoWay}" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" />
                    <DataGridComboBoxColumn Header="DTY"  DisplayIndex="10" TextBinding ="{Binding BTopY, Mode=TwoWay}" x:Name="cmbBTopY" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" ElementStyle="{StaticResource scDGCombo}"/>
                    <DataGridTextColumn Header="STY"   DisplayIndex="11" Binding="{Binding BTopY, Mode=TwoWay}" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" />
                    <DataGridComboBoxColumn Header="DBX"  DisplayIndex="12" TextBinding ="{Binding BBottomX, Mode=TwoWay}"  x:Name="cmbBBottomX" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" ElementStyle="{StaticResource scDGCombo}"/>
                    <DataGridTextColumn Header="SBX" DisplayIndex="13" Binding="{Binding SBottomX, Mode=TwoWay}" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}"/>
                    <DataGridComboBoxColumn Header="DBY"  DisplayIndex="14" TextBinding ="{Binding BBottomY, Mode=TwoWay}" x:Name="cmbBBottomY" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" ElementStyle="{StaticResource scDGCombo}"/>
                    <DataGridTextColumn Header="SBY"  DisplayIndex="15" Binding="{Binding BBottomY, Mode=TwoWay}" CellStyle="{StaticResource CellGotFocus}" HeaderStyle="{StaticResource HeaderStyle}" />
            </DataGrid.Columns>               
        </DataGrid>            
    </DockPanel>                       

【问题讨论】:

  • 您必须覆盖数据网格单元格模板。

标签: wpf vb.net winforms datagrid


【解决方案1】:

你必须覆盖datagrid单元格的单元格模板

<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="False">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center"></ContentPresenter>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这只是一个你可以参考的例子,像这样你可以做任何你想要的模板

希望这会有所帮助。

【讨论】:

  • 那么,我只是在 Style.Triggers 部分指定我想要的颜色(当网格不在焦点上时)?
  • 它不允许我添加所有代码,因为它太大了。我是 WPF 的新手。你能告诉我应该在这里添加哪一部分吗?我刚刚添加了 DataGrid 部分的代码。
  • 除了网格之外还有其他控件吗?
  • 尝试将该标签的tabindex = 0和grid =1
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2017-08-07
  • 2014-11-01
  • 2013-01-28
相关资源
最近更新 更多