网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > Silverlight > 正文

DataGrid相关的几个小知识点

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

1 、列标题居中。
可以通过设置DataGridColumn的HeadStyle实现,HeadStyle的XAML代码如下:

  1. <Style x:Key="DataGridHeaderStyle" TargetType="Primitives:DataGridColumnHeader"> 
  2.      <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
  3. </Style> 

2、根据绑定实体的属性值不同呈现不同的外观(例如,将年龄小于18岁的标记为红色)。
可以使用DataGridTemplateColumn + 自定义转换器实现。
列的XAML代码如下:

  1. <data:DataGridTemplateColumn Header="Age"  Width="80"> 
  2.     <data:DataGridTemplateColumn.CellTemplate> 
  3.         <DataTemplate> 
  4.             <TextBlock Text="{Binding Age}" VerticalAlignment="Center"  
  5.                 Foreground="{Binding Age, Converter={StaticResource converter}}"></TextBlock> 
  6.         </DataTemplate> 
  7.     </data:DataGridTemplateColumn.CellTemplate> 
  8. </data:DataGridTemplateColumn> 

你可能会想到通过绑定DataGridTextColumn的Foreground属性实现同样的功能,遗憾的是,DataGridTextColumn的Foreground属性并不是依赖项属性,因此绑定到该属性是不可以的。
自定义转换器的代码(注:由于是单向绑定,只实现了Convert方法)如下:

  1. public class AgeConverter : IValueConverter 
  2.     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
  3.     { 
  4.         int age = (int)value; 
  5.         Color color = age < 18 ? Colors.Red : Colors.Black; 
  6.         return new SolidColorBrush(color); 
  7.     } 
  8.  
  9.     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
  10.     { 
  11.         throw new NotImplementedException(); 
  12.     } 

3、动态控制模板列中控件的属性。
使用场景:例如使用DataGrid对员工档案进行展示或编辑,为了方便的删除员工档案,为DataGrid添加包含“删除”按钮的模板列。当展示员工档案时,DataGrid的IsReadOnly属性为true,当编辑员工档案时,DataGrid的IsReadOnly属性为false。但是,“删除”按钮的可用性并不会随着DataGrid的IsReadOnly属性的改变而改变,需要我们用代码动态控制。(注:如果设置DataGrid的IsEnabled属性为false,按钮是不可用的,但DataGrid不可滚动,并不适合查看数据)
解决方案:可以在资源中添加一个按钮,便于我们的代码访问并设置按钮的属性;然后将模板列中按钮的属性绑定到资源中的按钮的相应属性上,这样便可以通过设置资源中按钮的属性实现设置模板列中按钮的属性。与该做法类似的,也可以自定义一个包含要设置的控件的属性并实现INotifyPropertyChanged接口的类,然后在资源中添加该类的实例,然后在代码中通过设置资源中该类的实例的属性实现设置模板列中按钮的属性。

以上三点的完整示例如码如下:
DataGridSample.xaml

  1. <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="AutoCompleteBoxSample.DataGridSample" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     xmlns:Primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"  
  5.     xmlns:local="clr-namespace:Sample" Width="400" Height="300"> 
  6.     <UserControl.Resources> 
  7.         <Button x:Key="deleteButtonTemplate"></Button> 
  8.          
  9.         <local:AgeConverter x:Key="converter"></local:AgeConverter> 
  10.  
  11.         <Style x:Key="DataGridHeaderStyle" TargetType="Primitives:DataGridColumnHeader"> 
  12.             <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
  13.         </Style> 
  14.  
  15.     </UserControl.Resources> 
  16.     <Grid x:Name="LayoutRoot" Background="White"> 
  17.         <Grid.RowDefinitions> 
  18.             <RowDefinition Height="Auto"></RowDefinition> 
  19.             <RowDefinition Height="*"></RowDefinition> 
  20.         </Grid.RowDefinitions> 
  21.         <Button Content="ChangeReadonly" Click="ChangeReadOnly" Margin="0,10" ></Button> 
  22.         <data:DataGrid Name="dg" Grid.Row="1" AutoGenerateColumns="False" > 
  23.             <data:DataGrid.Columns> 
  24.                 <data:DataGridTextColumn Binding="{Binding Code}" HeaderStyle="{StaticResource DataGridHeaderStyle}" 
  25.                     Header="Code"  Width="80" > 
  26.                 </data:DataGridTextColumn> 
  27.                 <data:DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="120" /> 
  28.                 <data:DataGridTemplateColumn Header="Age"  Width="80"> 
  29.                     <data:DataGridTemplateColumn.CellTemplate> 
  30.                         <DataTemplate> 
  31.                             <TextBlock Text="{Binding Age}" VerticalAlignment="Center"  
  32.                                 Foreground="{Binding Age, Converter={StaticResource converter}}"></TextBlock> 
  33.                         </DataTemplate> 
  34.                     </data:DataGridTemplateColumn.CellTemplate> 
  35.                 </data:DataGridTemplateColumn> 
  36.                 <data:DataGridTemplateColumn x:Name="cl1" Header="Delete"> 
  37.                     <data:DataGridTemplateColumn.CellTemplate> 
  38.                         <DataTemplate> 
  39.                             <Button Name="btnDel" Content="Delete" DataContext="{StaticResource deleteButtonTemplate}"  
  40.                                     IsEnabled="{Binding IsEnabled}" Click="Delete"  ></Button> 
  41.                         </DataTemplate> 
  42.                     </data:DataGridTemplateColumn.CellTemplate> 
  43.                 </data:DataGridTemplateColumn> 
  44.             </data:DataGrid.Columns> 
  45.         </data:DataGrid>         
  46.     </Grid> 
  47. </UserControl> 

DataGridSample.xaml.cs

  1. public partial class DataGridSample : UserControl 
  2.     public DataGridSample() 
  3.     { 
  4.         InitializeComponent(); 
  5.  
  6.         this.dg.ItemsSource = this.bll.EmployeeList; 
  7.     } 
  8.  
  9.     private EmployeeBll bll = new EmployeeBll(); 
  10.  
  11.     private void ChangeReadOnly(object sender, RoutedEventArgs e) 
  12.     { 
  13.         this.dg.IsReadOnly = !this.dg.IsReadOnly; 
  14.  
  15.         (this.Resources["deleteButtonTemplate"as Button).IsEnabled = !this.dg.IsReadOnly; 
  16.     } 
  17.  
  18.     private void Delete(object sender, RoutedEventArgs e) 
  19.     { 
  20.         MessageBox.Show("Delete"); 
  21.     } 
  22.  
  23. public class AgeConverter : IValueConverter 
  24.     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
  25.     { 
  26.         int age = (int)value; 
  27.         Color color = age < 18 ? Colors.Red : Colors.Black; 
  28.         return new SolidColorBrush(color); 
  29.     } 
  30.  
  31.     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
  32.     { 
  33.         throw new NotImplementedException(); 
  34.     } 

Employee.cs

  1. public class Employee 
  2.     public string Code { getset; } 
  3.     public string Name { getset; } 
  4.     public int Age { getset; } 
  5.  
  6.  
  7.     public override string ToString() 
  8.     { 
  9.         return Name; 
  10.     } 
  11.  
  12. public class EmployeeBll 
  13.     public EmployeeBll() 
  14.     { 
  15.         this.employeeList = new List<Employee>(); 
  16.         this.employeeList.Add(new Employee { Code = "001", Name = "Mike", Age = 16 }); 
  17.         this.employeeList.Add(new Employee { Code = "002", Name = "John", Age = 18 }); 
  18.         this.employeeList.Add(new Employee { Code = "003", Name = "Rose", Age = 20 }); 
  19.  
  20.     } 
  21.  
  22.     private List<Employee> employeeList; 
  23.  
  24.     public List<Employee> EmployeeList 
  25.     { 
  26.         get { return this.employeeList; } 
  27.     } 

示例的运行效果:

image

  • 下一篇资讯: Silverlight中的数据访问
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师