2010-06-18 92 views
4

爲什麼當DataGrid設置爲IsReadOnly = FALSE時,該列中的ComboBox只能通過在空單元格中雙擊來顯示?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有兩種風格。一個用於單元格未處於編輯模式時,另一個單元格處於編輯模式。通常情況下,非編輯模式只是顯示一個文本塊,而不是您可能期望的實際控件(組合框,文本框等)。一旦開始編輯單元格,文本塊將被替換爲適當的控件。 如果您將datagrid設置爲IsReadOnly = true,那麼這意味着單元格永遠不會進入其編輯模式,這就是您所看到的行爲。

當創建DataGridTemplateColumn時,您必須替換所有內置的datagrid邏輯。作爲一個例子,如果你希望你的模板列是隻讀的,當datagrid是隻讀的,那麼你必須手動將這兩個值綁定在一起。 如果你想獲得與內建列(當單元格不處於編輯模式時的textblock)相同的行爲,那麼你必須使用觸發器來提供適當的控制模板。另外請注意,如果您使用內置列(例如DataGridCheckBoxColumn),並且您使用了ElmentStyle(例如將複選框居中),那麼列的單元格都是可編輯的,儘管數據網格設置爲IsReadOnly = true 。發生這種情況的原因是,當您指定ElmentStyle時,您將替換內置樣式,其中包含邏輯,以在數據網格爲只讀時使複選框爲只讀。

+0

已經發現了;-)但很好總結:) – msfanboy 2010-07-17 10:01:18

相關問題