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);

有任何想法吗?

4

1 回答 1

0

在标准 WPF ComboBox 中,IsReadOnly仅在 时有效IsEditable = true,但不会阻止用户选择值。它只是使可编辑的文本框成为只读的。

要完全防止控件被选中,您应该使用IsEnabled = false.

于 2016-03-24T09:42:38.530 回答