Как выборочно отключить редактирование в DataGrid? - PullRequest
2 голосов
/ 30 марта 2012

По умолчанию редактирование активируется клавишей F2, двойной щелчок и ввод в выбранной ячейке. Как я могу включить / отключить эти (некоторые из них) триггеры редактирования?

Ответы [ 2 ]

3 голосов
/ 30 марта 2012
datagrid.KeyDown += new KeyEventHandler(datagrid_KeyDown);

void datagrid_KeyDown(object sender, KeyEventArgs e)
    {
        //obviously you'll have to add some code here
        //if(!datagridIsInEditMode) then
            if (Keyboard.IsKeyDown(Key.F2))
                   datagrid.BeginEdit();
            else
                  e.Handled = true;
    }
2 голосов
/ 30 марта 2012

Я думаю, что самый простой способ - оставить поведение datagrid в одиночку, он знает, что делает, и создать свой собственный элемент управления в шаблоне редактирования. Давайте назовем это (для справки) CustomTextBox. Пусть этот CustomTextBox будет делать то, что вам нравится, например отвечать только на клавишу F2 и т. Д. Таким образом, вы не создаете странные поведения в сетке данных и не инкапсулируете пользовательские поведения в свой пользовательский элемент управления.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock DataContext="{Binding SomeProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <yourNamespace:CustomTextBox DataContext="{Binding SomeProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn> 
...