Onun merkezinde bir kırmızı çarpı çizen bir denetim yapmaya çalışıyorum. Çaprazların bir piksel genişliğinde olmasını istiyorum ve antialiasing'i devre dışı bırakmak ve ekranın piksellerine yapışmak istiyorum.WPF bir piksel geniş çizgi bazen kayboluyor
Denetim çalışır, ancak bir ayırıcı içeren bir Izgara içine eklerseniz, ayırıcıyı sürüklediğimde satırlardan biri bazen kaybolur. Yatay bir ayırıcı ile bir ızgara içine koyarsam, yatay çizgi bazen kaybolur ve dikey ayırıcı ile bir ızgara içine koyarsam, dikey çizgi bazen kaybolur.
Çizgiler kaybolmasını nasıl durdurabilirim? İşte
xaml kodu:<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>
Ve burada HalfValueConverter kodudur:
: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);
}
}
}
Bu, doğru pozisyona splitter sürüklerken nasıl görünüyor
Ve bu nasıl o görünmelidir:
"SnapsToDevicePixels" işlevine ek olarak UseLayoutRounding = "True" işlevini denediniz mi? – gomi42
Bu işe yaradı, teşekkürler. Bunu bir cevap olarak yazarsanız memnuniyetle kabul ederim. – Ove