网站 数据库 模板,中国购物网站设计欣赏,wordpress的托管,山东省建设厅网站地址01—概述WPF 自带了一个表格控件datagrid#xff0c;这个控件类似winfrom中的datagridview#xff0c;在数据显示的时候也经常会用到#xff0c;这节主要讲解如何从后台代码获取到单元格控件并改变其相关属性#xff1a;背景色、前景色、字体等。02—效果演示03—代码后台c… 01—概述WPF 自带了一个表格控件datagrid这个控件类似winfrom中的datagridview在数据显示的时候也经常会用到这节主要讲解如何从后台代码获取到单元格控件并改变其相关属性背景色、前景色、字体等。02—效果演示03—代码后台csusing System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;namespace Caliburn.Micro.Hello
{/// summary/// ShellView.xaml 的交互逻辑/// /summarypublic partial class ShellView : UserControl{public ShellView(){InitializeComponent();}private void DG_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e){int colindex -1;int rowindex -1;//方法1//DataGridCellInfo info new DataGridCellInfo(dg.Items[0], dg.Columns[2]);//方法2//foreach (DataGridCellInfo info in this.dgSourceData.SelectedCells)//{// string str ((TextBlock)info.Column.GetCellContent(info.Item)).Text;// Console.WriteLine(str);//}//方案1var info this.dgSourceData.SelectedCells.FirstOrDefault();var str ((TextBlock)info.Column.GetCellContent(info.Item)).Text;//((TextBlock)info.Column.GetCellContent(info.Item)).Foreground new SolidColorBrush(Colors.Red);//Console.WriteLine(str);//方案2colindex this.dgSourceData.CurrentCell.Column.DisplayIndex;//获取选中单元格列号//rowindex this.dgSourceData.SelectedIndex;//获取选中单元格行号for (int i 0; i ShellViewModel.StudentList.Count(); i){if (ShellViewModel.StudentList[i] this.dgSourceData.CurrentItem){//MessageBox.Show(当前选择的行是 i.ToString());rowindex i;}}DataGridRow row (DataGridRow)dgSourceData.ItemContainerGenerator.ContainerFromIndex(rowindex);//获取选中单元格所在行DataGridCellsPresenter presenter GetVisualChildDataGridCellsPresenter(row);//函数调用获取行中所有单元格的集合DataGridCell cell (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(colindex);//锁定选中单元格重点if (cell ! null){TextBlock tb cell.Content as TextBlock;Console.WriteLine(tb.Text);dgSourceData.ScrollIntoView(row, dgSourceData.Columns[colindex]);//cell (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(colindex);cell.Focus();cell.Background new SolidColorBrush(Colors.Red);//OK!问题解决选中单元格变色cell.Foreground new SolidColorBrush(Colors.Yellow);cell.FontSize 20;}}private void dgSourceData_BeginningEdit(object sender, DataGridCellEditEndingEventArgs e){}/// summary/// 获取父可视对象中第一个指定类型的子可视对象/// /summary/// typeparam nameT可视对象类型/typeparam/// param nameparent父可视对象/param/// returns第一个指定类型的子可视对象/returnspublic static T GetVisualChildT(Visual parent) where T : Visual{T childContent default(T);int numVisuals VisualTreeHelper.GetChildrenCount(parent);for (int i 0; i numVisuals; i){Visual v (Visual)VisualTreeHelper.GetChild(parent, i);childContent v as T;if (childContent null){childContent GetVisualChildT(v);}if (childContent ! null){ break; }}return childContent;}public void dgSourceData_SelectionChanged(object sender, SelectionChangedEventArgs e){MessageBox.Show(1111.ToString());//SelectionModeExtended SelectionUnitCell 模式下触发不了}}
}前台xamlDataGrid NamedgSourceData AutoGenerateColumnsFalse ItemsSource{Binding StudentList,ModeTwoWay,UpdateSourceTriggerPropertyChanged} ContextMenu{Binding menu1} RowHeaderWidth30 SelectedItem {Binding SelectedItems} SelectionModeSingle SelectionUnitCellcal:Message.Attach[Event SelectionChanged][GridControl_SelectionChanged($source,$eventArgs)]; SelectedCellsChangedDG_SelectedCellsChanged CellEditEndingdgSourceData_BeginningEdit SelectionChangeddgSourceData_SelectionChanged DataGrid.ColumnsDataGridTextColumn HeaderName Binding{ Binding PathName,ModeTwoWay,UpdateSourceTriggerPropertyChanged} MinWidth68/DataGridTextColumn HeaderAge Binding{ Binding PathAge,ModeTwoWay,UpdateSourceTriggerPropertyChanged} MinWidth68/DataGridTextColumn HeaderId Binding{ Binding PathId,ModeTwoWay,UpdateSourceTriggerPropertyChanged} MinWidth48//DataGrid.Columns/DataGrid04—解析① 因为我需要绑定SelectedCellsChanged事件所以前台将默认的行选中模式修改为单元格选中模式SelectionModeSingle SelectionUnitCell这样修改后SelectionChanged这个事件将不再触发只有在行选中模式下生效②获取选中单元格的值var info this.dgSourceData.SelectedCells.FirstOrDefault();var str ((TextBlock)info.Column.GetCellContent(info.Item)).Text;③获取选中的列号colindex this.dgSourceData.CurrentCell.Column.DisplayIndex;//获取选中单元格列号④获取选中行的行号在SelectionUnitFullRow 时候可以通过这样获取rowindex this.dgSourceData.SelectedIndex;//获取选中单元格行号在当SelectionUnitCell时我是通过选中单元格对应行的信息和表格控件绑定的集合匹配获取行号的for (int i 0; i ShellViewModel.StudentList.Count(); i){if (ShellViewModel.StudentList[i] this.dgSourceData.CurrentItem){//MessageBox.Show(当前选择的行是 i.ToString());rowindex i;}}⑤获取选中单元格并改变字体颜色var info this.dgSourceData.SelectedCells.FirstOrDefault();var str ((TextBlock)info.Column.GetCellContent(info.Item)).Text;((TextBlock)info.Column.GetCellContent(info.Item)).Foreground new SolidColorBrush(Colors.Red);05—源码下载网盘下载链接https://pan.baidu.com/s/1TD2BT5hiT-z-_7Z2Bn3PVQ提取码添加小编微信获取技术群添加小编微信并备注进群小编微信mm1552923 公众号dotNet编程大全