Como faço para remover as reticências para um UITypeEditor personalizado que é somente leitura?
-
03-07-2019 - |
Pergunta
Eu tenho dois campos que são do mesmo tipo em minha propriedade da rede. No entanto, um é somente leitura, o outro é editável.
Ambos os campos são de um tipo personalizado, e, assim, ter um UITypeEditor costume, o que coloca o botão ([...]) elipsis no campo.
[
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 { ... }
Neste exemplo, FactoredAreaMod está disponível para ser editado, mas ambos têm o elipsis, o que causará uma grande confusão com os usuários. Qualquer maneira de desligar isso ??
Solução
atributo Use a ReadOnly . Esta marca como tempo de design somente leitura, mantendo-o de leitura / gravação para o uso de tempo de execução.
Além disso, você deverá aplicar o editor atributo para o tipo, em vez das propriedades. Não há nenhum ganho em aplicá-la a uma propriedade, se você não quer que a propriedade para ser editável.
Outras dicas
Graças a Jeff Yates, eu vim com uma solução alternativa. Aqui está como eu resolvido ...
O maior problema foi que o EditorAttribute realmente foi atribuído no FactoredAreaClass. Eu colocá-lo no exemplo cru só para mostrar que não havia um atributo editor atribuído.
[
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 { ... }
O truque é não usar o estilo Modal quando a propriedade limitada é somente leitura. Felizmente para nós, o contexto é fornecido no método GetEditStyle. Um simples código irá fazer o trabalho:
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return context.PropertyDescriptor.IsReadOnly
? UITypeEditorEditStyle.None
: UITypeEditorEditStyle.Modal;
}