我Adorner在 WPF 应用程序中使用一个在拖放操作中呈现放置点。这条线应该是一条黑线,一个像素粗,但它最终会变成两倍并略带灰色。我猜这在某种程度上与 WPF 在子像素级别的渲染方式有关。使用 的Window托管内容AdornerLayer已SnapsToDevicePixels设置为true,这在过去解决了类似的问题,但似乎根本没有影响Adorner。这是我得到的输出。文本下方 2 像素粗的灰线应为 1 像素粗和黑色:的Pen用于绘制线定义与:_pen = new Pen(Brushes.Black, 1);并使用以下方法绘制:drawingContext.DrawLine(_pen, left, right);该AdornerLayer存在于默认的Window。如果这很重要,则将Adorner应用于 a TreeViewon aUserControl放置在Window.我需要做些什么才能让它以我想要的方式呈现?
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
在您的装饰器类中,您可以尝试其中一些选项和它们的组合......这就是我在装饰器中使用的来消除模糊线条和模糊图标:
RenderOptions.SetEdgeMode(this, EdgeMode.Aliased);
RenderOptions.SetBitmapScalingMode(this, BitmapScalingMode.NearestNeighbor);
SnapsToDevicePixels = true;
UseLayoutRounding = true;
不幸的是,您自己提供的答案有时是唯一的答案。偏移 0.5,将画笔宽度设置为 1.0001 等是非常常见的解决方法。WPF 试图通过抗锯齿来变得聪明,但是对于 1 像素宽度/高度线和其他类型的元素,它们并没有做到这一点。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
玩弄各种选项后,我发现,抵消left并right通过.5调用之前DrawLine修复这个问题。这似乎也印证了我的亚像素理论。
left.Offset(5, 5);
right.Offset(5, 5);
drawingContext.DrawLine(_pen, left, right);
虽然这确实有效,但我发现它是一个非常不令人满意的解决方案。我的绘图逻辑很可能会变得更复杂,我不想经常处理半像素偏移。
我希望其他人可以为我指出一种“更正确”的处理方式。
- 2 回答
- 0 关注
- 218 浏览
添加回答
举报
0/150
提交
取消