如何在WPF中避免单个像素线消失?

7
我使用了一个在Grid中的Path元素(StrokeThickness="1" SnapsToDevicePixels="True"),并且我想要调整窗口大小,Grid元素被Viewbox元素包裹。
问题:
当我调整窗口大小时,Path元素有时会消失。如果我将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>

很遗憾,我没有声望来发布运行时效果。


我假设它在特定的高度值上消失了(一致地)?可能只有奇数或其他某种模式? - SimpleVar
你遇到过这个问题吗?问题在于如果笔画粗细为3像素,然后稍微调整一下窗口大小,有时可能会变成2像素。 - RambleInX
2
不要把它放到Viewbox里。Viewbox会缩放其子元素的渲染输出,而不是其中可能包含的任何几何图形,你想要什么呢? - Clemens
我希望这条线可以被缩放并且有清晰的边缘。在放大的过程中,线应该保持其宽度,例如一像素,然后变为两个像素。但不是一像素,然后可能消失,然后再变成一像素、两像素,再变成一像素...我认为这可能是wpf中的一个bug。 - RambleInX
我也发现VisualBrush会像ViewBox一样失去线条。https://stackoverflow.com/q/44495238/6116637 - lindexi
1个回答

0

我在使用Viewbox时也遇到了分隔符问题。有些分隔符会在某些分辨率下消失。为了解决这个问题,我将它们替换为高度为1像素的边框:

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

这可以避免在viewBox中单像素的线条消失。 希望对您也有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接