Pergunta

Então, eu estava lendo as diretrizes da interface do usuário do Windows Vista que alguém linkou em outra pergunta, e elas mencionaram que você deveria ser capaz de sobreviver a uma mudança para 120 DPI.Bem, eu inicio minha VM útil com meu aplicativo instalado e o que obtemos...AAAAH!!!FALHA ENORME na UI!

Está tudo confuso:alguns contêineres não são grandes o suficiente para o texto;alguns controles que estavam posicionados "um ao lado do outro" agora estão todos comprimidos/afastados;alguns botões não são altos o suficiente;meu ListView as colunas não são largas o suficiente...eee.

Parece que uma abordagem completamente diferente é necessária.Meu anterior foi basicamente usar o designer VS2008 Windows Forms para criar, eu acho, um layout baseado em pixels.Posso ver que se eu continuar com o Windows Forms, FlowLayoutPanels seriam úteis, embora eu os tenha achado bastante inflexíveis no passado.Eles também não resolvem o problema onde os contêineres (por ex.o próprio formulário) não são grandes o suficiente;presumivelmente há uma maneira de fazer isso?Talvez aquilo AutoSize propriedade?

Isso também pode ser um sinal de que é hora de embarcar para o WPF;Tenho a impressão de que foi projetado especificamente para esse tipo de coisa.

A questão básica parece se resumir a estes:

  • Se eu continuar com o Windows Forms, quais são todos os truques para obter um layout independente do tamanho da fonte que possa sobreviver ao usuário definir suas fontes grandes ou definir a exibição para 120 DPI?
  • O WPF tem vantagens significativas aqui e, em caso afirmativo, você pode tentar me convencer de que vale a pena mudar?
  • Existem "práticas recomendadas" gerais para layouts independentes de tamanho de fonte, na pilha .NET ou em geral?
Foi útil?

Solução

Saiba como o Âncora e Doca propriedades funcionam em seus controles, deixe qualquer coisa que possa Tamanho automático sozinho e use um TableLayoutPanel quando você puder.

Se você fizer essas três coisas, obterá muita experiência de design do WPF no Windows Forms.Um bem desenhado TableLayoutPanel fará o possível para dimensionar os controles para que eles se ajustem corretamente ao formulário.Combinado com Tamanho automático controles, encaixe e Modo de escala automática mencionado por Soeren Kuklau, você deverá ser capaz de fazer algo que seja bem dimensionado.Caso contrário, seu formulário pode ter muitos controles;considere dividi-lo em abas, caixas de ferramentas flutuantes ou algum outro espaço.

No WPF é muito mais fácil porque o conceito de controles de dimensionamento automático está integrado;na maioria dos casos, se você estiver colocando um elemento WPF usando um par de coordenadas, estará fazendo errado.Ainda assim, você não pode mudar o fato de que em resoluções mais baixas não é necessário muito texto de 120 dpi para preencher a tela.Às vezes o problema não é o layout, mas uma tentativa de colocar muito em um espaço pequeno.

Outras dicas

Se eu continuar com o Windows Forms, quais são todos os truques para obter um layout independente do tamanho da fonte que possa sobreviver ao usuário definir suas fontes grandes ou definir a exibição para 120 DPI?

Para um, Modo de escala automática pode ser seu amigo.

Em geral, o problema é usar duas "constantes" diferentes para o layout do formulário e, em seguida, alterar uma dessas constantes sem alterar a outra.

Você está usando pixels para entidades de formulário e pontos (basicamente polegadas) para especificar o tamanho da fonte.Pixels e pontos são relacionados por DPI, então você altera o DPI e de repente seus valores fixos de pixel não se alinham com seus valores fixos de ponto.

Existem pacotes e aulas para isso, mas no final das contas você deve escolher uma unidade ou outra, ou dimensionar uma das unidades de acordo com a constante variável.

Pessoalmente, eu mudaria as entidades do formulário para polegadas.Não sou uma pessoa de C#, então não sei se isso tem suporte nativo ou se você precisa executar algum dimensionamento dinâmico de formulário na inicialização do aplicativo.

Se você tiver que fazer isso em seu software, vá em frente e dimensione tudo normalmente (digamos, para seus 96 DPI habituais).

Quando seu aplicativo for iniciado, verifique se o sistema está em 96 DPI antes de mostrar seus formulários.Se for, ótimo.Caso contrário, defina uma variável com o fator de correção e dimensione e traduza (modifique a localização e o tamanho) de cada entidade antes de mostrar o formulário.

O máximo, porém, seria especificar tudo em polegadas ou pontos (um ponto equivale a 1/72 de polegada) e deixar o sistema operacional lidar com isso.Você pode ter que lidar com casos extremos (uma tela externa com um DPI definido corretamente mostraria seu aplicativo em alguns pixels...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top