ComboBox WPF DataGridComboBoxColumn видим, только когда DataGrid имеет IsReadOnly=FALSE

Почему 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>

1 ответ

Решение

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

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

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

Другие вопросы по тегам