2016-10-05 55 views
0

我正在构建一个WPF应用程序,我希望我的DataGrid能够隐藏与Excel非常类似的列。我有一个右键菜单,弹出'hide column'作为选项。这里是如何工作的:如何将WPF DataGrid标题视为选定单元格?

 if (dgfinal_Copy.CurrentCell.Column == null) 
     { 

     } 

     else 
     { 

      int columnIndex = dgfinal_Copy.CurrentCell.Column.DisplayIndex; 
      dgfinal_Copy.Columns[columnIndex].Visibility = Visibility.Collapsed; 
     } 

我不得不添加if语句,因为如果有人点击网格之前单击了头,那么当前单元格是空。另外,如果我单击列[2]中的一个单元格,但然后单击[0]的标题,然后单击我的菜单中的'隐藏列',正如您可能已经猜到的那样,[2]隐藏而不是[0]。

我想改变这个使用标题的列索引(如果这是光标所在的位置),如果不是,那么当前单元格的列索引。

我补充说我使用的是看我俯瞰东西容易完整方法:

 private void WorkItemsGrid_Hide(object sender, RoutedEventArgs e) 
    { 

    if (dgfinal_Copy.CurrentCell.Column == null) 
    { 

    } 

    else 
    { 


     int colIn = dgfinal_Copy.SelectedCells[0].Column.DisplayIndex; 
     System.Windows.MessageBox.Show(colIn.ToString()); 

     int columnIndex = dgfinal_Copy.CurrentCell.Column.DisplayIndex; 
     dgfinal_Copy.Columns[columnIndex].Visibility = Visibility.Collapsed; 
    } 

} 

        <MenuItem Header="Unhide All Columns" Click="WorkItemsGrid_UnHide" /> 

回答

1

以下是工作与我的基本代码。就目前而言,它返回点击列标题的列索引。你应该能够适应你的确切需求。

XAML:

<DataGrid Name="dtgrdNotes" MouseRightButtonUp="DataGrid_Click"> 
    <DataGrid.ContextMenu> 
     <ContextMenu MenuItem.Click="menuItem_Click"> 
      <MenuItem Name="hide" Header="Hide"/> 
     </ContextMenu> 
    </DataGrid.ContextMenu> 
</DataGrid> 

代码背后:

DependencyObject mainDep = new DependencyObject(); 

private void DataGrid_Click(object sender, RoutedEventArgs e) 
{ 
    DependencyObject dep = (DependencyObject)e.OriginalSource; 

    while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader)) 
    { 
     dep = VisualTreeHelper.GetParent(dep); 
    } 

    mainDep = dep; 
} 

private void menuItem_Click(object sender, RoutedEventArgs e) 
{ 
    DependencyObject dep = mainDep; 

    int index = -1; 

    if (dep is DataGridColumnHeader) 
    { 
     DataGridColumnHeader header = dep as DataGridColumnHeader; 
     index = header.DisplayIndex; 
     dtgrdNotes.Columns[index].Visibility = Visibility.Collapsed; 
    } 

    if (dep is DataGridCell) 
    { 
     DataGridCell cell = dep as DataGridCell; 
     index = cell.Column.DisplayIndex; 
     dtgrdNotes.Columns[index].Visibility = Visibility.Collapsed; 
    } 
    label.Content = index; 
} 

这应该既是一个细胞和列标题点击工作。

+0

不起作用。问题是没有选择单元格。只有标题被选中。我需要那个时候选择的那个头的列索引。 – user3486773

+0

@ user3486773查看我编辑的答案 – Hank

+0

@ user3486773它对ya有效吗? – Hank

相关问题