Как удалить многоточие для пользовательского UITypeEditor, который доступен только для чтения?

StackOverflow https://stackoverflow.com/questions/616671

  •  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;       
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top