2016-03-24 31 views
0

我有一個服務,它在運行時將屬性的ReadOnly屬性設置爲true/false,因此用戶將無法更改propertyGrid中的屬性值。綁定屬性被標記爲只讀時禁用組合框下拉列表

當在文本編輯器中編輯屬性時,該服務很有用。 但是,我的一些編輯是組合框。 我希望在將屬性設置爲只讀時禁用下拉列表,這意味着用戶將能夠在組合框中看到選定的項目,但是當他單擊組合框旁邊的箭頭以查看選項時,什麼也不會發生。這不適用於當前的實施。我想我需要使用屬性的不同屬性。我試圖改變財產的「EditableAttribute」,但它不工作.... 我使用改變只讀屬性代碼:

 PropertyDescriptor descriptor = TypeDescriptor.GetProperties(obj)[property]; 
     ReadOnlyAttribute attribute = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)]; 
     FieldInfo fieldInfo = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance); 
     fieldInfo.SetValue(attribute, value); 

任何想法?

+0

您是否嘗試過使用公共屬性IsReadOnly而不是字段? – Domysee

+0

這沒關係,因爲對於文本編輯器來說,上面的代碼確實有效...... – mmm

+0

您是否已經在MVVM中實現了這個功能?您是否試圖將VM中的屬性綁定到'Combobox'的'IsEnabled'屬性中。 – Gopichandar

回答

0

在標準WPF組合框中,IsReadOnly僅在IsEditable = true有效,但不阻止用戶選擇值。它只是使可編輯文本框爲只讀。

要完全防止選擇控制,您應該使用IsEnabled = false

+0

有沒有綁定屬性本身的任何屬性,我可以改變,所以組合框將被禁用,沒有綁定組合框isEnabled屬性? – mmm

+0

@mmm我找不到任何這樣的屬性。讓我快速搜索它。 – Gopichandar

+0

謝謝。我也嘗試過搜索,但目前找不到任何東西.. – mmm