如何避免单个像素线在 wpf 中消失?
Posted
技术标签:
【中文标题】如何避免单个像素线在 wpf 中消失?【英文标题】:how to avoid a single pixel line disappear in wpf? 【发布时间】:2015-06-15 15:15:37 【问题描述】:我使用路径element(StrokeThickness="1" SnapsToDevicePixels="True")
在网格中。我想调整窗口大小,Grid 元素由 Viewbox 元素包裹。
问题
当我调整窗口大小时,路径会消失一段时间。如果我将 SnapsToDevicePixels 设置为 false,Path 元素可能会模糊,这不是我想要的。
如何避免单像素线消失?
XAML 代码:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="207" Width="475">
<Viewbox Stretch="Fill">
<Grid Height="320" Width="517">
<Path Data="M0,0 H1 z" StrokeThickness="1" Stroke="Black" Margin="72,73,79,218" Stretch="Fill" SnapsToDevicePixels="True" MinHeight="1"/>
</Grid>
</Viewbox>
可惜我没有发布运行时效果的声誉。
【问题讨论】:
我认为它会在特定的高度值上消失(始终如一)?可能只有奇数或其他模式? 你遇到过吗?问题是如果 strokethickness 是 3 像素,那么稍微调整一下窗口的大小,有时可能是 2 像素。 只是不要把它放在 Viewbox 中。 Viewbox 会缩放其子元素的渲染输出,而不是缩放其树中可能包含的任何几何图形,那么您期望什么? 我希望线条可以缩放并有清晰的边缘。在放大的过程中,线条要保持它的宽度,比如一个像素。然后到两个像素。但不是一个像素,然后可能会消失,然后是一个像素,两个像素,然后又变成一个像素......我认为这可能是 wpf 中的一个错误 我还看到 VisualBrush 会像 ViewBox 一样丢失线。***.com/q/44495238/6116637 【参考方案1】:我在 Viewbox 中使用分隔符试验了同样的问题。其中一些会因某些分辨率而消失。为了解决这个问题,我将它们替换为 1 像素高度的边框:
< Border Background="DarkGray" Grid.Row="0" Grid.ColumnSpan="7" Height="1" />
这样可以避免一个像素的单行在 viewBox 中消失。 希望对你也有用。
【讨论】:
以上是关于如何避免单个像素线在 wpf 中消失?的主要内容,如果未能解决你的问题,请参考以下文章