WPF:获取DataGrid控件单元格DataGridCell


  • 转载:http://blog.csdn.net/jhqin/article/details/7645357
  • /* ---------------------------------------------------------- 
  • 文件名称:DataGridPlus.cs 
  •  
  • 作者:秦建辉 
  •  
  • MSN:splashcn@msn.com 
  • QQ:36748897 
  •  
  • 博客:http://blog.csdn.net/jhqin 
  •  
  • 开发环境: 
  •     Visual Studio V2010 
  •     .NET Framework 4 Client Profile 
  •  
  • 版本历史: 
  •     V1.0    2012年06月07日 
  •             WPF DataGrid控件扩展方法 
  •  
  • 参考资料: 
  •     http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b7299e55-92e2-4a6b-8987-869fef8f22eb/ 
  • ------------------------------------------------------------ */  
  • using System.Windows.Controls;  
  • using System.Windows.Controls.Primitives;  
  • using System.Windows.Media;  
  •   
  • namespace Splash.WPF  
  • {  
  •     public static class DataGridPlus  
  •     {  
  •         /// <summary>   
  •         /// 获取DataGrid控件单元格   
  •         /// </summary>   
  •         /// <param name="dataGrid">DataGrid控件</param>   
  •         /// <param name="rowIndex">单元格所在的行号</param>   
  •         /// <param name="columnIndex">单元格所在的列号</param>   
  •         /// <returns>指定的单元格</returns>   
  •         public static DataGridCell GetCell(this DataGrid dataGrid, int rowIndex, int columnIndex)          
  •         {  
  •             DataGridRow rowContainer = dataGrid.GetRow(rowIndex);  
  •             if (rowContainer != null)  
  •             {  
  •                 DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);  
  •                 DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);  
  •                 if (cell == null)  
  •                 {  
  •                     dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[columnIndex]);  
  •                     cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);  
  •                 }  
  •                 return cell;  
  •             }  
  •             return null;  
  •         }  
  •   
  •         /// <summary>   
  •         /// 获取DataGrid的行   
  •         /// </summary>   
  •         /// <param name="dataGrid">DataGrid控件</param>   
  •         /// <param name="rowIndex">DataGrid行号</param>   
  •         /// <returns>指定的行号</returns>   
  •         public static DataGridRow GetRow(this DataGrid dataGrid, int rowIndex)          
  •         {  
  •             DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);  
  •             if (rowContainer == null)  
  •             {  
  •                 dataGrid.UpdateLayout();  
  •                 dataGrid.ScrollIntoView(dataGrid.Items[rowIndex]);  
  •                 rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);  
  •             }  
  •             return rowContainer;  
  •         }  
  •   
  •         /// <summary>   
  •         /// 获取父可视对象中第一个指定类型的子可视对象   
  •         /// </summary>   
  •         /// <typeparam name="T">可视对象类型</typeparam>   
  •         /// <param name="parent">父可视对象</param>   
  •         /// <returns>第一个指定类型的子可视对象</returns>   
  •         public static T GetVisualChild<T>(Visual parent) where T : Visual  
  •         {  
  •             T child = default(T);  
  •             int numVisuals = VisualTreeHelper.GetChildrenCount(parent);  
  •             for (int i = 0; i < numVisuals; i++)  
  •             {  
  •                 Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);  
  •                 child = v as T;  
  •                 if (child == null)  
  •                 {  
  •                     child = GetVisualChild<T>(v);  
  •                 }  
  •                 if (child != null)  
  •                 {  
  •                     break;  
  •                 }  
  •             }  
  •             return child;  
  •         }  
  •     }  
  • }  

  • 免责声明!

    本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



     
    粤ICP备18138465号  © 2018-2025 CODEPRJ.COM