C# WPF GridControl用法举例

本文介绍了C# WPF中GridControl的使用,它比原生DataGrid功能更强大。通过实例展示了如何设置控件高度、创建Checkbox列以及自定义模板列的数据绑定。并提供了前台XAML和后台代码示例,展示如何绑定数据源并自动绑定列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

     GridControl是Dev中的表格控件,类似于Winfrom中的DataGridView,以及WPF中的DataGrid,但是这个控件功能比原生的功能要强大很多,下面用实例举例说明此控件的用法.

代码

前台XAML:


<UserControl x:Class="Caliburn.Micro.Hello.SubTabPageView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Caliburn.Micro.Hello" 
             xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
              xmlns:cal="http://www.caliburnproject.org"
             mc:Ignorable="d"
        Height="300" Width="300">
    <StackPanel>
        <Label Content="this is a tab control page" Margin="5"/>
        <dxg:GridControl ItemsSource="{Binding GridParamItems}" MaxHeight="400">
            <dxg:GridColumn Header="姓名" FieldName="Name" Width="80"/>
            <dxg:GridColumn Header="选择" FieldName="IsChecked" Width="80" />
            <dxg:GridColumn Header="选择" Width="80" >
                <dxg:GridColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding RowData.Row.IsChecked}"
                            HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </DataTemplate>
                </dxg:GridColumn.CellTemplate>
            </dxg:GridColumn>
        </dxg:GridControl>
    </StackPanel>
</UserControl>

这里有几个要注意的地方:

① GridControl控件需要设置控件高度,不然程序会报错闪退;

② checkbox列不需要自定义模板,只要绑定到布尔类型的数据上就可以自动识别改变列的样式;

③ 自定义的模板列的数据绑定需要使用RowData.Row.属性名。

④ GridControl ItemsSource绑定好数据源以后,每个列只用FieldName和模型类的属性名对应上就可以自动绑定上.

后台代码:


using PropertyChanged;
using System.Collections.ObjectModel;

namespace Caliburn.Micro.Hello
{
    [AddINotifyPropertyChangedInterface]
    public class SubTabPageViewModel
    {
        public ObservableCollection<GridParamDTO> GridParamItems { get; set; } = new ObservableCollection<GridParamDTO>();

        public SubTabPageViewModel()
        {
            GridParamItems.Add(new GridParamDTO() { Name = "张三", IsChecked = true });
            GridParamItems.Add(new GridParamDTO() { Name = "李四", IsChecked = true });
        }
    }

    public class GridParamDTO
    {
        public string Name { get; set; }

        public bool IsChecked { get; set; }
    }
}

运行结果:


 

<think>好的,用户的问题是关于在C# WPF中设置GridControl的间隔行或列的背景颜色。首先,我需要确认用户使用的是哪个GridControl,因为WPF本身没有内置的GridControl,这通常是第三方控件库中的组件,比如DevExpress的GridControl。假设用户指的是DevExpress的GridControl,因为这是比较常见的情况。 接下来,我需要回忆或查找DevExpress GridControl的相关文档和API,看看如何设置间隔行或列的样式。根据经验,DevExpress的GridControl提供了丰富的样式定制选项,通常可以通过事件处理或者样式触发器来实现这种效果。 首先,设置间隔行。可能需要使用RowStyle或CustomRowStyle事件。在事件处理程序中,判断行索引是否为奇数或偶数,然后设置背景色。例如,在CustomRowStyle事件中,检查行索引的奇偶性,如果是偶数行,设置背景颜色。 然后是间隔列。这个稍微复杂一些,因为列的间隔可能需要通过列样式或者单元格样式来实现。可能需要使用CustomColumnDisplayText事件或者创建样式触发器,根据列的索引来改变背景颜色。例如,在列的样式中使用转换器,将列索引转换为颜色,或者直接在XAML中定义样式触发器,根据索引的奇偶性应用不同的背景色。 另外,用户可能需要具体的代码示例,所以需要提供XAML和C#代码的片段,展示如何实现这两种情况。同时,需要提醒用户注意命名空间的引用和事件绑定的正确性,确保代码能够运行。 还需要考虑是否有其他方法,比如使用AlternationIndex属性,这在某些控件中用于交替行样式。但DevExpress的GridControl是否支持这个属性,需要确认。如果不支持,那么事件处理的方式可能更可靠。 最后,生成相关问题,可能涉及性能优化、其他样式设置,或者与其他控件库的比较。确保问题与用户当前需求相关,帮助其进一步学习。</think>### C# WPF GridControl 设置间隔行/列背景颜色方法 在WPF中使用GridControl(以DevExpress控件为例)设置间隔行/列背景色,可通过以下两种方式实现: #### 一、间隔行背景设置 1. **通过`CustomRowStyle`事件实现** 在XAML中绑定事件: ```xml <dxg:GridControl CustomRowStyle="GridControl_CustomRowStyle"> <!-- 列定义 --> </dxg:GridControl> ``` C#代码中实现事件逻辑: ```csharp private void GridControl_CustomRowStyle(object sender, CustomRowStyleEventArgs e) { if (e.RowHandle % 2 == 0) // 判断偶数行 e.Style = new Style(typeof(Control)) { Setters = { new Setter(Control.BackgroundProperty, Brushes.LightGray) } }; } ``` 2. **通过`AlternationIndex`属性**(仅支持部分控件版本) ```xml <dxg:GridControl> <dxg:GridControl.View> <dxg:TableView AlternationCount="2" AlternationBrush="LightGray"/> </dxg:GridControl.View> </dxg:GridControl> ``` #### 二、间隔列背景设置 通过列样式结合值转换器: ```xml <dxg:GridControl> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Column1"> <dxg:GridColumn.CellStyle> <Style TargetType="dxg:CellContentPresenter"> <Setter Property="Background" Value="{Binding ColumnPosition, Converter={local:ColumnIndexToColorConverter}}"/> </Style> </dxg:GridColumn.CellStyle> </dxg:GridColumn> </dxg:GridControl.Columns> </dxg:GridControl> ``` 自定义转换器: ```csharp public class ColumnIndexToColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (int)value % 2 == 0 ? Brushes.LightBlue : Brushes.Transparent; } } ``` #### 关键说明 - 事件方式适用于动态行/列更新场景 - AlternationIndex性能更优但限制较多[^1] - 列间隔需注意样式作用域问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值