Obtendo números inteiros de MouseEventArgs.GetPosition ()?
-
13-09-2019 - |
Pergunta
Eu estou recebendo valores de ponto flutuante como (471, 326,723333333333) de chamar MouseEventArgs.GetPosition()
no meu controle de fronteira. Enquanto eu sempre pode rodada os números manualmente, eu queria saber se há algum tipo de configuração para obter números inteiros.
Eu pensei que colocar SnapsToDevicePixels
como True no meu controle de fronteira ajudaria, mas isso não acontece, como é provavelmente não relacionado.
Todas as idéias?
Obrigado!
Solução
Em WPF, você sempre vai ter posicionamento retornou em valores de ponto flutuante. Se você deseja arredondar-lo, você precisa fazer isso manualmente.
Isto é devido à independência de resolução, e é por design.
Outras dicas
Desde WPF é independente do dispositivo e nem todos os dispositivos compartilham os mesmos tamanhos de pixel passando MouseEvents com coordenadas fracionários faz sentido (também você pode colocar controles no espaço 3D onde toda a coordenar coisas tradução sistema não vai acontecer com valores de pixel integrais) .
SnapsToDevicePixels é apenas uma propriedade controle como um controle é exibida e que bordas e linhas retas se encontram de preferência em pixels completos do que no meio. Não tem nada a ver com a forma como os eventos do mouse são tratados (como você também ter notado).
Como uma regra geral, tudo no WPF é medido em valores double
, por isso ou viver com ele (você verifica provavelmente seria a mesma de qualquer maneira) ou continuar o arredondamento para int
se você gosta assim: -)
Posicionamento do seu rato é contínua. Posicionando no seu monitor é discreto. Os valores das coordenadas que você está recebendo são melhores do que o que você precisa e arredondando sempre lhe dará os pixels mais próximos. Basicamente, em volta dele e não se preocupe com isso.