2009-06-03 2 views
4

Если у вас есть WPF DataGrid слева от окна с областью справа для отображения выбранной записи. Выбранная запись состоит из Textbox es и ComboBox es, которые отключены до нажатия кнопки редактирования. Все работает так, как ожидалось. DataGridDataGridDataGridDataGridDataGridDataGridDataGridDataGridDataGrid новый участник Более легкое управление, такое как TextBlock, может использоваться до тех пор, пока не будет нажата кнопка «Редактировать», затем можно отключить TextBlock s для ComboBox es.Шаблон переключателя WPF DataGrid между режимом просмотра и режимом редактирования

Я уверен, что это можно сделать с помощью своего рода шаблонов, но когда я попытался поэкспериментировать с этим, все события, связанные с ComboBox, сообщают об ошибке, поскольку они больше не присутствуют, поскольку они заменили TextBlocks в «режиме просмотра».

Возможно, я ошибаюсь, поэтому некоторые рекомендации будут оценены.

ответ

3

здесь свободно article

Чтобы применить одним кликом редактирования для всех ячеек в DataGrid

  1. Вставьте нижеприведенный стиль в ресурсы вашего DataGrid
  2. Вставить метод в код позади

Чтобы применить редактирование одним щелчком только определенные клетки в DataGrid

  1. установить х: Ключ на стиль (напр.)
  2. Вставить стиль в ресурсы вашего DataGrid
  3. Применить стиль к CellStyle свойству столбцов, которые вы хотели бы иметь одного редактирование щелчка (напр.)
  4. Вставить метод в код за

    // 
    // SINGLE CLICK EDITING 
    // 
    private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
        DataGridCell cell = sender as DataGridCell; 
        if (cell != null && !cell.IsEditing && !cell.IsReadOnly) 
        { 
         if (!cell.IsFocused) 
         { 
          cell.Focus(); 
         } 
         DataGrid dataGrid = FindVisualParent<DataGrid>(cell); 
         if (dataGrid != null) 
         { 
          if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow) 
          { 
           if (!cell.IsSelected) 
            cell.IsSelected = true; 
          } 
          else 
          { 
           DataGridRow row = FindVisualParent<DataGridRow>(cell); 
           if (row != null && !row.IsSelected) 
           { 
            row.IsSelected = true; 
           } 
          } 
         } 
        } 
    }  
    
    static T FindVisualParent<T>(UIElement element) where T : UIElement 
    { 
        UIElement parent = element; 
        while (parent != null) 
        { 
         T correctlyTyped = parent as T; 
         if (correctlyTyped != null) 
         { 
          return correctlyTyped; 
         } 
    
         parent = VisualTreeHelper.GetParent(parent) as UIElement; 
        } 
        return null; 
    } 
    
+0

Благодаря Arsenmkrt, я видел некоторые из статей доктора WPF, но вы правы, это одна вдоль линии, что я ищу. – Mitch

+1

Эта ссылка умерла здесь: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing – Smithy

1

Свойство ContentTemplateSelector позволит вам выбрать один шаблон или другой, в зависимости от текущего режима (просмотр/редактирование)

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