2010-06-18 1 views
4

Почему ComboBox в этом столбце отображается только через двойной щелчок в пустой ячейке, когда DataGrid установлен на IsReadOnly = FALSE ???WPF DataGridComboBoxColumn `ComboBox видна только в том случае, когда DataGrid имеет IsReadOnly = FALSE

<DataGridComboBoxColumn Width="*" IsReadOnly="False" Header="test" /> 

с использованием DataTemplateColumn работает как всегда ... что случилось с этим DataGridComboBoxColumn?

работы:

<DataGridTemplateColumn Header="Schoolclass"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox Background="Blue" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

ответ

9

Все встроенные DataGridColumns имеют два стиля. Один из них, когда ячейка не находится в режиме редактирования, и когда ячейка находится в режиме редактирования. Обычно режим редактирования не отображает текстовый блок, а не фактический элемент управления, который вы можете ожидать (ComboBox, TextBox и т. Д.). И как только вы начнете редактировать ячейку, текстовый блок заменяется соответствующим элементом управления. Если у вас есть набор данных, равный IsReadOnly = true, это означает, что ячейки никогда не переходят в режим редактирования, и это поведение, которое вы видите.

При создании DataGridTemplateColumn вы существенно замените всю встроенную логику datagrid. В качестве примера, если вы хотите, чтобы ваш шаблонный столбец был только для чтения, когда datagrid только для чтения, вам необходимо вручную связать два значения вместе. И если вы хотите получить то же поведение, что и встроенные столбцы (текстовый блок, когда ячейка не находится в режиме редактирования), вам придется использовать триггеры для предоставления соответствующих контрольных шаблонов.

Также обратите внимание, что если вы используете встроенный столбец (например, DataGridCheckBoxColumn) и используете для него ElmentStyle (например, для центрирования checkbox), то ячейки столбца могут быть доступны для редактирования, несмотря на то, что datagrid устанавливается в IsReadOnly = true , Это происходит потому, что, когда вы указываете ElmentStyle, вы заменяете встроенный стиль, который содержит логику, чтобы делать флажки только для чтения, когда datagrid только для чтения.

+0

уже нашли это ;-) Но славное резюме :) – msfanboy

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

  • Нет связанных вопросов^_^