Problema de resolução de canvas no WPF?

Eu vou detectar a resolução com o seguinte código no WPF:

double height = System.Windows.SystemParameters.PrimaryScreenHeight; double width = System.Windows.SystemParameters.PrimaryScreenWidth; 

Resolução atual da minha canvas é 1920 * 1200, mas a height é 960.0 e width é 1536.0 !!!

O que há de errado com isso ?
Desde já, obrigado.

Tenha em mente que todos os locais e tamanhos do WPF são ponto flutuante com uma unidade de 1/96 polegadas. Não pixels. Isso torna a resolução de designs de janelas independente. Fazendo as contas: altura = 960/96 = 10 polegadas. Com seu adaptador de vídeo configurado para 120 DPI (120/96 = 125%): 10 * 120 = 1200 pixels. O mesmo para largura: 1536/96 * 120 = 1920 pixels.

O System.Windows.Forms funciona em unidades de pixels. Você está recebendo menos de 1050 para a altura porque subtrai a altura da barra de tarefas. Mas para o WPF você sempre quer trabalhar com 1/96 “, nunca pixels.

Para uma implementação ainda mais robusta, você deve calcular os fatores de DPI em seu sistema e trabalhar com esses fatores. Um valor normal de DPI é 96, mas alguns monitores podem ter valores diferentes. Considere que seu código pode estar sendo executado em um monitor que possui um valor de DPI diferente de 96. Considere este código:

  private static void CalculateDpiFactors() { Window MainWindow = Application.Current.MainWindow; PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow); Matrix m = MainWindowPresentationSource.CompositionTarget.TransformToDevice; thisDpiWidthFactor = m.M11; thisDpiHeightFactor = m.M22; } 

Você pode então usar essas proporções para obter os valores finais:

 CalculateDpiFactors(); double ScreenHeight = SystemParameters.PrimaryScreenHeight * thisDpiHeightFactor; double ScreenWidth = SystemParameters.PrimaryScreenWidth * thisDpiWidthFactor; 

Os valores de ScreenHeight e ScreenWidth devem corresponder ao que você vê na janela Propriedades do seu monitor.

Tente SystemParameters.FullPrimaryScreenWidth e FullPrimaryScreenHeight, acredito que PrimaryScreenWidth e Height retornem o tamanho da janela do cliente disponível após remover a barra de tarefas e outros deskbands na canvas.

Se você marcar “Usar escala DPI do estilo do Windows XP”, o valor retornado de “Screen.PrimaryScreen.Bounds” estará correto. Caso contrário, o valor retornado é proporcionalmente reduzido pelo valor de DPI (que é o padrão).

Para localizar a checkbox de seleção “Usar escala DPI do estilo do Windows XP”, expanda o link “Para tornar os itens de texto e na canvas mais claros em programas que não são projetados para alta DPI” no link a seguir: http://windows.microsoft. com / en-us / windows-vista / Torne o texto na sua canvas maior ou menor

Por favor, ligue para este após o seu windows está carregado.

  public static class Ext { public static Size GetNativePrimaryScreenSize(this Window window) { PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(window); Matrix m = mainWindowPresentationSource.CompositionTarget.TransformToDevice; var dpiWidthFactor = m.M11; var dpiHeightFactor = m.M22; double screenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor; double screenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor; return new Size(screenWidth, screenHeight); } } 

tente estes..eu acredito que isso poderia corrigir o erro …..

System.Windows.Form1.Screen.PrimaryScreen.Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;