如何避免单个像素线在 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 会像 V​​iewBox 一样丢失线。***.com/q/44495238/6116637 【参考方案1】:

我在 Viewbox 中使用分隔符试验了同样的问题。其中一些会因某些分辨率而消失。为了解决这个问题,我将它们替换为 1 像素高度的边框:

< Border Background="DarkGray" Grid.Row="0" Grid.ColumnSpan="7" Height="1" />

这样可以避免一个像素的单行在 viewBox 中消失。 希望对你也有用。

【讨论】:

以上是关于如何避免单个像素线在 wpf 中消失?的主要内容,如果未能解决你的问题,请参考以下文章

WPF C# 图像控件在 540 像素以下被剪切/消失

画出特殊的背景

如何在OpenGL中绘制单个像素?

如何在 WPF 数据网格中选择单个单元格?

C# wpf BitmapImage从本地资源获得未知像素大小的图片,如何将其对象设为指定大小

数据绑定如何避免 WPF 中的递归更新?