gpt4 book ai didi

c# - WPF 一个像素宽的线有时会消失

转载 作者:太空狗 更新时间:2023-10-29 21:49:53 29 4
gpt4 key购买 nike

我正在尝试制作一个在其中心绘制红十字的控件。我希望十字宽度为一个像素,并且我想禁用抗锯齿并使其与屏幕像素对齐。

该控件有效,但如果我将它添加到具有拆分器的网格内,当我拖动拆分器时,其中一条线有时会消失。如果我将它放在带有水平分隔线的网格内,水平线有时会消失,如果我将它放在带有垂直分隔线的网格内,垂直线有时会消失。

如何阻止线条消失?

这是xaml代码:

<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTest"
Title="MainWindow" Height="600" Width="800">
<Window.Resources>
<local:HalfValueConverter x:Key="halfConv" />

<Style TargetType="Line">
<Setter Property="Stroke" Value="Red"/>
<Setter Property="StrokeThickness" Value="1"/>
<Setter Property="RenderOptions.EdgeMode" Value="Aliased"/>
<Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="2" Background="Black" Name="grdParent">
<Line X1="{Binding ActualWidth, ElementName=grdParent, Converter={StaticResource halfConv}}"
Y1="0"
X2="{Binding ActualWidth, ElementName=grdParent, Converter={StaticResource halfConv}}"
Y2="{Binding ActualHeight, RelativeSource={x:Static RelativeSource.Self}}"
Height="100"
/>
<Line X1="0"
Y1="{Binding ActualHeight, ElementName=grdParent, Converter={StaticResource halfConv}}"
X2="{Binding ActualWidth, RelativeSource={x:Static RelativeSource.Self}}"
Y2="{Binding ActualHeight, ElementName=grdParent, Converter={StaticResource halfConv}}"
Width="100"
/>
</Grid>
<GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" Background="Gray" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows" />
</Grid>
</Window>

这是 HalfValueConverter 的代码:

using System;
using System.Windows.Data;

namespace WpfTest
{
public class HalfValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((double)value / 2);
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((double)value * 2);
}
}
}

这是将拆分器拖到正确位置时的样子:

Line gone

它应该是这样的:

Line visible

最佳答案

为了阻止线条消失,除了 SnapsToDevicePixels 之外,我还需要使用 UseLayoutRounding="True"

关于c# - WPF 一个像素宽的线有时会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29320420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com