Como renderizar um controle para se parecer com ComboBox com estilos visuais habilitados?
Pergunta
Eu tenho um controle que é modelado em um Caixa combo.Quero renderizar o controle para que o controle fronteira parece um padrão Caixa de combinação do Windows.Especificamente, segui a documentação do MSDN e toda a renderização do controle está correta, exceto a renderização quando o controle está desabilitado.
Só para ficar claro, isto é para um sistema com Estilos Visuais habilitado.Além disso, todas as partes do controle são renderizadas corretamente, exceto a borda ao redor de um controle desabilitado, que não corresponde ao controle desabilitado. Borda da caixa de combinação cor.
estou usando o VisualStyleRenderer aula.MSDN sugere usar o VisualStyleElement.TextBox
elemento para o Caixa de texto parte de Caixa combo controle, mas um padrão desativado Caixa de texto e um padrão desativado Caixa combo desenhe de forma um pouco diferente (um tem uma borda cinza claro, o outro uma borda azul claro).
Como posso obter a renderização correta do controle em um estado desabilitado?
Nenhuma solução correta
Outras dicas
Não tenho 100% de certeza se é isso que você está procurando, mas você deve verificar o VisualStyleRenderer no namespace System.Windows.Forms.VisualStyles.
- Classe VisualStyleRenderer (MSDN)
- Como:Renderizar um elemento de estilo visual (MSDN)
- VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)
Como o VisualStyleRenderer não funcionará se o usuário não tiver estilos visuais habilitados (ele/ela pode estar executando o 'modo clássico' ou um sistema operacional anterior ao Windows XP), você deve sempre ter um substituto para a classe ControlPaint.
// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS
&& VisualStyleInformation.IsEnabledByUser)
{
renderer = new VisualStyleRenderer(
VisualStyleElement.ComboBox.DropDownButton.Disabled);
}
e faça assim ao desenhar:
if(renderer != null)
{
// Use visual style renderer.
}
else
{
// Use ControlPaint renderer.
}
Espero que ajude!
Algum dos ControlPaint métodos úteis para isso?Isso é o que costumo usar para controles renderizados personalizados.