Я хочу смочь выбрать определенную ячейку в Silverlight 3.0 DataGrid и поместить его в режим редактирования. Я могу использовать VisualTreeManager для определения местоположения ячейки. Как я переключаюсь на режим редактирования?
Каждый DataGridCell похож на это в VisualTreeManager:
System.Windows.Controls.DataGridCell
System.Windows.Controls.Grid
System.Windows.Shapes.Rectangle
System.Windows.Controls.ContentPresenter
System.Windows.Controls.TextBlock
System.Windows.Shapes.Rectangle
System.Windows.Shapes.Rectangle
с TextBlock, содержащим текст, я хочу отредактировать.
Обновление
После @AnthonyWJones' предложения вот то, как я пытался сделать это использование BeginEdit ().
Я хотел сохранить это простым, таким образом, я думал, что выберу столбец в первой строке. Даже это доказало вне моего знания SL! В конце я получаю первую строку путем создания поля, названного firstRow для содержания его:
private DataGridRow firstRow;
добавленный обработчик LoadingRow к DataGrid:
LoadingRow="computersDataGrid_LoadingRow"
и
private void computersDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
if (this.firstRow == null)
this.firstRow = e.Row;
}
и затем добавляя кнопку к панели для инициирования редактирования:
private void Button_Click(object sender, RoutedEventArgs e)
{
this.dataGrid.SelectedItem = this.firstRow;
this.dataGrid.CurrentColumn = this.dataGrid.Columns[4];
this.dataGrid.BeginEdit();
}
Я нажимаю кнопку, и корректная ячейка выбрана, но она не входит в редактирование на ячейке. Это берет ручной щелчок для достижения этого.
Я не могу правильно понять вашу проблему, но у меня была похожая проблема
, которую я хотел заработать только несколько клеток сетки, редактируемые и остальные не были. Вместо того, чтобы создавать логику и назначение доступным как True / false, я проделал простую вещь.
ISREADONLY
как FALSE PORTINGCELLFOLFOREDIT
и отправьте обратный вызов ConficeDit
идет как
namespace foo
{
public class foobar
{
public foobar()
{
sampleGrid = new DataGrid();
sampleGrid.IsReadOnly = false;
sampleGrid.PreparingCellForEdit += new EventHandler<DataGridPreparingCellForEditEventArgs>(sampleGrid_PreparingCellForEdit);
}
void sampleGrid_PreparingCellForEdit(object sender, DataGridsampleGrid_PreparingCellForEditEventArgs e)
{
if (sampleGrid.SelectedItem != null)
{
bool isWritableField = CheckIfWritable()
if (isWritableField == false)
{
sampleGrid.CancelEdit();
}
// continue with your logic
}
}
private DataGrid sampleGrid;
}
}
Я не уверен, зачем вам нужно искать DataGridCell с помощью VisualTreeManager, и в настоящее время я не знаю, как правильно начать редактирование. Вы можете уйти, просто установив визуальное состояние ячейки на редактирование.
VisualStateManager.GoToState(myDataGridCell, "Editing", true);
Я не уверен, как ведет себя сетка, когда вы делаете что-то подобное вышеупомянутому. Вам может показаться, что все идет немного грубо, если вам понадобится DataGrid, чтобы помочь вам вернуть изменения в строку.
Стандартным подходом было бы установить свойство DataGrid
SelectedItem
для элемента, представленного строкой, установить свойство CurrrentColum
для DataGridColumn
объект, представляющий столбец, в котором находится ячейка. Затем вызовите метод BeginEdit
.