• DataGridColumn普通样式和编辑样式


    一般情况下DataGridBoundColumn和DataGridComboBoxColumn足以满足多数列的样式,如果需要自定义列样式,则可以使用DataGridTemplateColumn类型。

    在设置列编辑样式之前,我们先创建一个简单的DataGrid,分别显示名称(用默认的DataGridTextColumn),和分数(使用DataGridTemplateColumn来定义自定义模板:一个ProgressBar):

    <DataGrid Name="dataGrid" AutoGenerateColumns="False">  
     
            <DataGrid.Columns>  
     
                <DataGridTextColumn Header="姓名"   
     
                                   Binding="{Binding Name}" 
     
                                   Width="*">  
     
                </DataGridTextColumn>  
     
                <DataGridTemplateColumn Header="分数" 
     
                                       Width="2*">  
     
                    <DataGridTemplateColumn.CellTemplate>  
     
                        <DataTemplate>  
     
                            <ProgressBar Value="{Binding Score}"/>  
     
                        </DataTemplate>  
     
                    </DataGridTemplateColumn.CellTemplate>  
     
                </DataGridTemplateColumn>  
     
            </DataGrid.Columns>  
     
        </DataGrid>  


    背后数据代码是这样:

    dataGrid.ItemsSource = new people[]  
     
                {  
     
                    new people(){ Name = "", Score = 100 },  
     
                    new people(){ Name = "", Score = 30 },  
     
                    new people(){ Name = "", Score = 86 },  
     
                    new people(){ Name = "", Score = 50 }  
     
                };  
     
                //people类就不用再说了,两个属性:Name和Score  

    结果就是:

    image

    第一列默认是可以编辑的(由于使用默认的DataGridTextColumn),而第二列我们只定义了显示的模板,无法实现编辑。
     

    1:设置DataGridBoundColumn

    从上面类型树上可以看到,DataGridBoundColumn是DataGridTextColumn,DataGridHyperlinkColumn和DataGridCheckBoxColumn的父类。作为父类,DataGridBoundColumn定义了两个属性来设置这些子类的普通样式和编辑样式。分别是ElementStyle和EditingElementStyle。它们都是Style对象(WPF中的样式)。这个Style的TargetType根据列的类型所变化。比如DataGridTextColumn,普通样式是针对TextBlock的。而编辑样式则应该针对TextBox。而DataGridCheckBoxColumn得普通样式和编辑样式都应该针对CheckBox的。

    所以把上面的XAML中的第一个列这样设置:

    <DataGridTextColumn Header="姓名"   
     
                                   Binding="{Binding Name}" 
     
                                   Width="*"> 
     
                    <DataGridTextColumn.ElementStyle> 
     
                        <Style TargetType="TextBlock"> 
     
                            <Setter Property="Foreground" Value="Red"/> 
     
                            <Setter Property="TextAlignment" Value="Center"/> 
     
                        </Style> 
     
                    </DataGridTextColumn.ElementStyle> 
     
                    <DataGridTextColumn.EditingElementStyle> 
     
                        <Style TargetType="TextBox"> 
     
                            <Setter Property="Foreground" Value="White"/> 
     
                            <Setter Property="Background" Value="Gray"/> 
     
                            <Setter Property="BorderBrush" Value="Navy"/> 
     
                            <Setter Property="BorderThickness" Value="2"/> 
     
                        </Style> 
     
                    </DataGridTextColumn.EditingElementStyle> 
     
                </DataGridTextColumn> 

    结果:

    image

    2:设置DataGridComboBoxColumn

    OK,虽然DataGridComboBoxColumn没有继承与DataGridBoundColumn,但是它和DataGridBoundColumn一样,同样有ElementStyle和EditingElementStyle这两个属性。当然对于DataGridComboBoxColumn,显然样式都要针对ComboBox的,使用上则和上面讲的的一样。

    3:设置DataGridTemplateColumn

    对于DataGridTemplateColumn,显然CellTemplate就是该列的普通显示样式了。对于编辑样式则可以使用EditingCellTemplate属性。

    再重新定义下XAML:

    <DataGridTemplateColumn Header="分数" 
     
                                       Width="2*"> 
     
                    <DataGridTemplateColumn.CellTemplate> 
     
                        <DataTemplate> 
     
                            <ProgressBar Value="{Binding Score}"/> 
     
                        </DataTemplate> 
     
                    </DataGridTemplateColumn.CellTemplate> 
     
                    <DataGridTemplateColumn.CellEditingTemplate> 
     
                        <DataTemplate> 
     
                            <StackPanel> 
     
                                <TextBlock Text="{Binding Score}" 
     
                                          TextAlignment="Center"/> 
     
                                <Slider Value="{Binding Score,UpdateSourceTrigger=PropertyChanged}" 
     
                                       Maximum="100"/> 
     
                            </StackPanel> 
     
                        </DataTemplate> 
     
                    </DataGridTemplateColumn.CellEditingTemplate> 
     
                </DataGridTemplateColumn> 
  • 相关阅读:
    Nginx应用详解及配置
    mongodb复制+分片集原理
    memcached架构及缓存策略
    redis数据类型
    redis数据库安装 redis持久化及主从复制
    shell脚本-正则、grep、sed、awk
    kvm虚拟机管理基础
    kvm热添加和热迁移
    zabbix调用api检索方法
    kubernetes deployment升级和回滚
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/14978831.html
Copyright © 2020-2023  润新知