2012-04-12 5 views
1

У меня есть DataGrid (.net framework 3.5, WPFToolKit). И я хочу изменить границы (влево или вправо) некоторых ячеек. Один, два или три. Итак, как я могу получить доступ к одной ячейке? И это возможно? Я нашел некоторые решения, но они предназначены для .net 4.Как получить ячейку от DataGrid?

ответ

2

Вы можете расширить DataGrid и добавить следующее: ПРИМЕЧАНИЕ: это всего лишь образец, вам не нужно выполнять некоторую обработку, которую я делаю:

public DataGridCell GetCell(int row, int column) 
    { 
     var rowContainer = GetRow(row); 

     if (rowContainer != null) 
     { 
      var presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer); 
      if (presenter == null) 
       return null; 

      // try to get the cell but it may possibly be virtualized 
      var cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); 
      if (cell == null) 
      { 
       // now try to bring into view and retreive the cell 
       ScrollIntoView(rowContainer, Columns[column]); 
       cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); 
      } 
      return cell; 
     } 
     return null; 
    } 

    public DataGridRow GetRow(int index) 
    { 
     var row = (DataGridRow)ItemContainerGenerator.ContainerFromIndex(index); 
     if (row == null) 
     { 
      // may be virtualized, bring into view and try again 
      ScrollIntoView(Items[index]); 
      row = (DataGridRow)ItemContainerGenerator.ContainerFromIndex(index); 
     } 
     return row; 
    } 

Для определения FindVisualChild, смотрите на this site.

+0

спасибо. GetRow отлично работает. Но для GetCell мне нужен DataGridCellPresenter. Есть ли для .net 3.5? Я не нашел. –

+0

О, извините, простите. Я нашел его. Я использовал неправильное пространство имен. –

Смежные вопросы