valor una poner ocultar obtener manualmente form foco ejemplos datos columna celda agregar c# .net wpf datagrid off-by-one

una - ocultar columna gridview c#



Las filas visibles en DataGrid están desactivadas por 1(contadas usando ContainerFromItem) (1)

Esto es lo que finalmente funcionó para mí:

uint VisibleRows = 0; var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid"); foreach(var Item in TicketGrid.Items) { var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item); if(Row != null) { /* This is the magic line! We measure the Y position of the Row, relative to the TicketGrid, adding the Row''s height. If it exceeds the height of the TicketGrid, it ain''t visible! */ if(Row.TransformToVisual(TicketGrid).Transform(new Point(0, 0)).Y + Row.ActualHeight >= TicketGrid.ActualHeight) { break; } VisibleRows++; } }

Hasta e incluyendo la fila 9 muestra 9 de 9 visibles . La fila "medio visible" da como resultado 9 de 10 visibles . En realidad, es mejor para mis propósitos que esto no cuente como una fila visible, ¡así que esto me servirá! :)

Nota: si reutiliza mi código sin usar el break , las filas invisibles después de la fila infractora arrojarán una NullRefException .

Tengo un DataGrid de dimensiones variables que dependen de screen-res. Necesito saber cuántas filas son visibles para el usuario. Aquí está mi código:

uint VisibleRows = 0; var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid"); foreach(var Item in TicketGrid.Items) { var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item); if(Row != null && Row.IsVisible) { VisibleRows++; } }

Estoy usando el siguiente código para probar los vars:

MessageBox.Show(String.Format("{0} of {1} rows visible", VisibleRows, TicketGrid.Items.Count));

  • Cuando no hay filas en la cuadrícula, muestra correctamente 0 de 0 filas visibles :
  • Cuando hay 1 fila en la grilla, muestra correctamente 1 de 1 filas visibles :
  • Cuando hay 9 filas en la cuadrícula, muestra correctamente 9 de 9 filas visibles :
  • La siguiente fila es "medio visible", por lo que la contaré mostrando 10 de las 10 filas visibles como correctas:
  • Sin embargo, la siguiente fila que se agregará es aparentemente visible, mostrando incorrectamente 11 de las 11 filas visibles :
  • Las filas agregadas después de esto son correctas (barra el callejero 1), por ejemplo, 11 de las 18 filas visibles :

No puedo simplemente - 1 , porque solo es incorrecto después de haber agregado cierto número. No puedo verificar > 10 , porque las dimensiones son variables.

¿Cómo puedo arreglar esto?