//public static T GetVisualChild<T>(System.Windows.Media.Visual parent) // where T : System.Windows.Media.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; //} #endregion #region D:\Enpot_Project\Enpot\ENPOT.Base\SC\ENPOT.Controls\System.Winodws.Controls.Extension\DataGridExtension.cs /// <summary> /// 右键菜单 /// </summary> /// <param name="datagrid"></param> public static void SetRightClickMenu(this System.Windows.Controls.DataGrid datagrid) { ContextMenu ctMenu = new ContextMenu(); var matchIcon = new System.Windows.Media.Imaging.BitmapImage(new Uri(" ", UriKind.Relative)); // 自定义图标 List <MenuItem> l = new List <MenuItem>(); MenuItem pasteMenuItem = new MenuItem(); pasteMenuItem.Icon = matchIcon; pasteMenuItem.Header = "区域粘贴"; pasteMenuItem.InputGestureText = ""; pasteMenuItem.Click += (o, e) => { try { datagrid.AreaPaste(); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } }; l.Add(pasteMenuItem); // 分割线 System.Windows.Controls.MenuItem lineMenuItem = new System.Windows.Controls.MenuItem(); lineMenuItem.IsEnabled = false; lineMenuItem.Height = 3; System.Windows.Media.Color color = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("Black"); System.Windows.Media.SolidColorBrush backgroundColor = new System.Windows.Media.SolidColorBrush(color); lineMenuItem.Background = backgroundColor; l.Add(lineMenuItem); MenuItem setTagMenuItem = new MenuItem(); setTagMenuItem.Icon = matchIcon; setTagMenuItem.Header = "复制单元格"; setTagMenuItem.InputGestureText = ""; setTagMenuItem.Click += (o, e) => { try { datagrid.SetTag_SourceCell(); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } }; l.Add(setTagMenuItem); MenuItem copyValueMenuItem = new MenuItem(); copyValueMenuItem.Icon = matchIcon; copyValueMenuItem.Header = "粘贴单元格"; copyValueMenuItem.InputGestureText = ""; copyValueMenuItem.Click += (o, e) => { try { datagrid.CopyValueFromSourceCell(); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } }; l.Add(copyValueMenuItem); ctMenu.ItemsSource = l; datagrid.ContextMenu = ctMenu; }