Как удалить многоточие для пользовательского UITypeEditor, который доступен только для чтения?
-
03-07-2019 - |
Вопрос
У меня есть два поля одного типа в моей сетке свойств. Однако один доступен только для чтения, а другой - для редактирования.
Оба эти поля имеют пользовательский тип и, следовательно, имеют пользовательский UITypeEditor, который помещает в поле кнопку elipsis ([...]).
[
CategoryAttribute("5 - Wind"),
DisplayName("Factored Area"),
Description("The factored area for the segment."),
EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
TypeConverter(typeof(umConversionTypeConverter)),
ReadOnly(true)
]
public FactoredAreaClass FactoredArea { ... }
[
CategoryAttribute("5 - Wind"),
DisplayName("Factored Area Modifier"),
Description("The factored area modifier."),
EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
TypeConverter(typeof(umConversionTypeConverter))
]
public FactoredAreaClass FactoredAreaMod { ... }
В этом примере FactoredAreaMod доступен для редактирования, но ОБА имеют элипсис, который вызовет большую путаницу у пользователей. Есть ли способ отключить это?
Решение
Используйте атрибут ReadOnly . Это помечает его как доступное только для чтения во время разработки, сохраняя его для чтения / записи для использования во время выполнения.
Кроме того, вы должны применить редактор атрибут типа, а не свойств. Нет смысла применять его к свойству, если вы не хотите, чтобы это свойство было редактируемым.
Другие советы
Благодаря Джеффу Йейтсу я нашел альтернативное решение. Вот как я это решил ...
Самой большой проблемой было то, что EditorAttribute был фактически назначен в FactoredAreaClass. Я поместил его в простой пример, чтобы показать, что был назначен атрибут редактора.
[
CategoryAttribute("5 - Wind"),
DisplayName("Factored Area"),
Description("The factored area for the segment."),
EditorAttribute(typeof(UITypeEditor), typeof(UITypeEditor)), // RESET THE UITYPEEDITOR to "nothing"
ReadOnly(true)
]
public FactoredAreaClass FactoredArea { ... }
[
CategoryAttribute("5 - Wind"),
DisplayName("Factored Area Modifier"),
Description("The factored area modifier."),
// the EditorAttribute and TypeConverter are part of FactoredAreaClass
]
public FactoredAreaClass FactoredAreaMod { ... }
Хитрость в том, чтобы не использовать модальный стиль, когда свойство bounded доступно только для чтения. К счастью для нас, контекст предоставляется в методе GetEditStyle. Простой код сделает работу:
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return context.PropertyDescriptor.IsReadOnly
? UITypeEditorEditStyle.None
: UITypeEditorEditStyle.Modal;
}