CompositionTarget.TransformToDevice 包含意外的矩阵值,但为什么呢?
我目前正在使用 PixelLab 的 BOT (Bag o' Tricks) 来实现其 ReorderListBox
控件,但我注意到列表项的鼠标按下速度明显减慢。
我已经追踪到控件创建其 DragPreviewAdorner
的方式,特别是 GetCurrentDPI
方法,其实现简单如下:
Matrix m = PresentationSource.FromVisual(visual)
.CompositionTarget
.TransformToDevice;
x = 96 / m.M11;
y = 96 / m.M22;
对于我的列表项,事情是,M11
和 M22
以微小数字的形式返回,从而提供非常大的 DPI(x = 100000,y = 5500)。因此,调用代码最终会创建一个巨大的内存位图,这反过来会导致垃圾收集时的延迟。
我的问题是:什么可能导致转换中出现这些看似错误的值?屏幕上一切看起来都很好。 :-/
谢谢。
I'm currently using PixelLab's BOT (Bag o' Tricks) for its ReorderListBox
control, but I've noticed some major slowdowns on the mousedown of a list item.
I've tracked it down to the way the control creates its DragPreviewAdorner
, specifically the GetCurrentDPI
method, which is implemented simply as:
Matrix m = PresentationSource.FromVisual(visual)
.CompositionTarget
.TransformToDevice;
x = 96 / m.M11;
y = 96 / m.M22;
Thing is, for my list items, M11
and M22
are coming back as tiny numbers, thereby giving very large DPI (x = 100000, and y = 5500). Consequently, the calling code ends up creating an enormous in-memory bitmap, which in turn causes a delay when garbage collected.
My question is: what might be causing these seemingly erroneous values in the transform? Everything looks fine on-screen. :-/
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论