我有一個帶AutoGenerated列的WPF 4.0 DataGrid。我只想讓用戶編輯第一列。有沒有一個簡單的方法來做到這一點?我可以指定哪些列可在WPF DataGrid中編輯?
我試圖添加一個DataGridCell樣式,並根據ColumnName(第一列始終具有相同的名稱)或ColumnIndex設置它的編輯能力,但是我無法弄清楚這個正確的XAML,或者即使它是可能的。
我有一個帶AutoGenerated列的WPF 4.0 DataGrid。我只想讓用戶編輯第一列。有沒有一個簡單的方法來做到這一點?我可以指定哪些列可在WPF DataGrid中編輯?
我試圖添加一個DataGridCell樣式,並根據ColumnName(第一列始終具有相同的名稱)或ColumnIndex設置它的編輯能力,但是我無法弄清楚這個正確的XAML,或者即使它是可能的。
我知道了....這是我用什麼:
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Value="PART_IsSelected" Binding="{Binding Path=Column.Header, RelativeSource={RelativeSource Self}}">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
如果你願意,你可以使用Column.DisplayIndex
代替Column.Header
我仍然不知道爲什麼綁定韓元「T直接工作,需要由的RelativeSource引用,但至少它的工作原理:)
每列有IsReadOnly
屬性。此外,整個DataGrid也有IsReadOnly [這不影響綁定,只是用戶編輯字段的能力]
編輯: 趕緊回答,抱歉。我只能猜測你不應該自動生成列,如果可能的話,所以你可以控制哪些是隻讀的,哪些控制模板會在哪裏...只需使用列的綁定屬性,所以你不需要自動生成它們。
下面的示例執行伎倆一列或多列
private void Grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.Header.ToString() == "COLUMNNAME")
{
// e.Cancel = true; // For not to include
// e.Column.IsReadOnly = true; // Makes the column as read only
}
}
private void dgTableDetailAdj_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) { foreach (DataGridColumn col in dgTableDetailAdj.Columns) { if (col.Header.Equals("columnName")) { col.IsReadOnly = true; } } }
請正確格式化您的代碼(縮進至少4個空格,並且不要超過需要的縮進)。而且,只有代碼才能解答問題,因爲他們沒有解釋他們如何解決問題。你可以請[編輯你的帖子](http://stackoverflow.com/posts/37851029/edit)來解決這些問題?謝謝,歡迎來到StackOverflow。 – 2016-06-16 06:05:40
的自的AutoGenerateColumns創建DataGrid中的查詢需要的是用戶定義的 – Rachel 2010-12-17 15:56:55
我認爲這篇文章可以幫助你:http://blog.smoura.com/wpf-toolkit-datagrid-part-ii-custom -styling /您需要創建自己的風格才能發生,但我認爲它完全可行 – Machinarius 2010-12-17 16:01:42
好的文章,但在我的情況下並不真正有用。我需要根據其DisplayIndex或ColumnName設置某個列是否可編輯,並且事先並不知道我的列將不是單個可編輯列。 – Rachel 2010-12-17 16:36:20