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

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

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

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

работает:

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

person msfanboy    schedule 18.06.2010    source источник


Ответы (1)


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

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

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

person Marko    schedule 17.07.2010