zoukankan      html  css  js  c++  java
  • WPF:获取DataGrid控件单元格DataGridCell

    1. 转载:http://blog.csdn.net/jhqin/article/details/7645357
    2. /* ---------------------------------------------------------- 
    3. 文件名称:DataGridPlus.cs 
    4.  
    5. 作者:秦建辉 
    6.  
    7. MSN:splashcn@msn.com 
    8. QQ:36748897 
    9.  
    10. 博客:http://blog.csdn.net/jhqin 
    11.  
    12. 开发环境: 
    13.     Visual Studio V2010 
    14.     .NET Framework 4 Client Profile 
    15.  
    16. 版本历史: 
    17.     V1.0    2012年06月07日 
    18.             WPF DataGrid控件扩展方法 
    19.  
    20. 参考资料: 
    21.     http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b7299e55-92e2-4a6b-8987-869fef8f22eb/ 
    22. ------------------------------------------------------------ */  
    23. using System.Windows.Controls;  
    24. using System.Windows.Controls.Primitives;  
    25. using System.Windows.Media;  
    26.   
    27. namespace Splash.WPF  
    28. {  
    29.     public static class DataGridPlus  
    30.     {  
    31.         /// <summary>   
    32.         /// 获取DataGrid控件单元格   
    33.         /// </summary>   
    34.         /// <param name="dataGrid">DataGrid控件</param>   
    35.         /// <param name="rowIndex">单元格所在的行号</param>   
    36.         /// <param name="columnIndex">单元格所在的列号</param>   
    37.         /// <returns>指定的单元格</returns>   
    38.         public static DataGridCell GetCell(this DataGrid dataGrid, int rowIndex, int columnIndex)          
    39.         {  
    40.             DataGridRow rowContainer = dataGrid.GetRow(rowIndex);  
    41.             if (rowContainer != null)  
    42.             {  
    43.                 DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);  
    44.                 DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);  
    45.                 if (cell == null)  
    46.                 {  
    47.                     dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[columnIndex]);  
    48.                     cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);  
    49.                 }  
    50.                 return cell;  
    51.             }  
    52.             return null;  
    53.         }  
    54.   
    55.         /// <summary>   
    56.         /// 获取DataGrid的行   
    57.         /// </summary>   
    58.         /// <param name="dataGrid">DataGrid控件</param>   
    59.         /// <param name="rowIndex">DataGrid行号</param>   
    60.         /// <returns>指定的行号</returns>   
    61.         public static DataGridRow GetRow(this DataGrid dataGrid, int rowIndex)          
    62.         {  
    63.             DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);  
    64.             if (rowContainer == null)  
    65.             {  
    66.                 dataGrid.UpdateLayout();  
    67.                 dataGrid.ScrollIntoView(dataGrid.Items[rowIndex]);  
    68.                 rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);  
    69.             }  
    70.             return rowContainer;  
    71.         }  
    72.   
    73.         /// <summary>   
    74.         /// 获取父可视对象中第一个指定类型的子可视对象   
    75.         /// </summary>   
    76.         /// <typeparam name="T">可视对象类型</typeparam>   
    77.         /// <param name="parent">父可视对象</param>   
    78.         /// <returns>第一个指定类型的子可视对象</returns>   
    79.         public static T GetVisualChild<T>(Visual parent) where T : Visual  
    80.         {  
    81.             T child = default(T);  
    82.             int numVisuals = VisualTreeHelper.GetChildrenCount(parent);  
    83.             for (int i = 0; i < numVisuals; i++)  
    84.             {  
    85.                 Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);  
    86.                 child = v as T;  
    87.                 if (child == null)  
    88.                 {  
    89.                     child = GetVisualChild<T>(v);  
    90.                 }  
    91.                 if (child != null)  
    92.                 {  
    93.                     break;  
    94.                 }  
    95.             }  
    96.             return child;  
    97.         }  
    98.     }  
    99. }  
  • 相关阅读:
    【2020-05-17】人生十三信条
    【2020-05-16】评价与骄傲
    【2020-05-15】每天都充满向上的激情
    【04NOIP普及组】火星人(信息学奥赛一本通 1929)(洛谷 1088)
    next_permutation(全排列算法)
    【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)
    快速幂
    【03NOIP普及组】栈(信息学奥赛一本通 1924)(洛谷 1044)
    【06NOIP普及组】数列(信息学奥赛一本通 1937)(洛谷 1062)
    【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)
  • 原文地址:https://www.cnblogs.com/qq247039968/p/4066058.html
Copyright © 2011-2022 走看看