Получение целых чисел из MouseEventArgs.GetPosition()?
-
13-09-2019 - |
Вопрос
Я получаю значения с плавающей запятой, например (471, 326.723333333333), при вызове MouseEventArgs.GetPosition()
на моем пограничном контроле.Хотя я всегда могу округлить числа вручную, мне было интересно, есть ли какая-нибудь настройка для получения целых чисел.
Я думал положить SnapsToDevicePixels
на True на моем пограничном контроле помогло бы, но это не так, поскольку это, вероятно, не связано.
Есть идеи?
Спасибо!
Решение
В WPF позиционирование всегда будет возвращаться в значениях с плавающей запятой.Если вы хотите округлить его, вам придется сделать это вручную.
Это связано с независимостью разрешения и предусмотрено замыслом.
Другие советы
Поскольку WPF не зависит от устройства и не все устройства имеют одинаковые размеры пикселей, передача MouseEvents с дробными координатами имеет смысл (также вы можете поместить элементы управления в трехмерное пространство, где весь процесс перевода системы координат не будет происходить с целочисленными значениями пикселей).
SnapsToDevicePixels — это всего лишь свойство, управляющее отображением элемента управления, а также то, что края и прямые линии предпочтительно лежат на целых пикселях, а не между ними.Это не имеет никакого отношения к тому, как обрабатываются события мыши (как вы тоже заметили).
Как правило, все в WPF измеряется в double
значения, так что либо живите с этим (ваши проверки, скорее всего, в любом случае будут такими же), либо продолжайте округлять до int
если вам так нравится :-)
Позиционирование с помощью мыши является непрерывным.Позиционирование на вашем мониторе дискретно.Значения координат, которые вы получаете, лучше, чем вам нужно, и округление всегда даст вам самые близкие пиксели.В общем, обойдите это и не беспокойтесь об этом.