Le code ci-dessous dessine deux lignes verticales sur un canevas. ces lignes semblent avoir une épaisseur différente sur l'écran bien qu'elles soient identiques dans le code. Je suis à la recherche d'un moyen de les rendre aussi nets que la bordure autour de la toile. La définition de Path.SnapsToDevicePixels n'a aucun effet. Le code est un exemple artificiel, et en général le canevas qui trace ces lignes peut être imbriqué plus profondément dans l'arbre visuel.problème d'alias
Merci pour toute aide konstantin
<Window x:Class="wpfapp.MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Border BorderBrush="Black"
BorderThickness="1"
Margin="10">
<Canvas x:Name="Canvas"
SizeChanged="OnCanvasSizeChanged" />
</Border>
</Grid>
</Window>
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;
namespace wpfapp
{
public partial class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
}
private void OnCanvasSizeChanged(object sender, SizeChangedEventArgs e)
{
StreamGeometry g = new StreamGeometry();
double h = this.Canvas.ActualHeight;
using (StreamGeometryContext c = g.Open())
{
c.BeginFigure(new Point(7, 0), false, false);
c.LineTo(new Point(7, h), true, false);
c.BeginFigure(new Point(14, 0), false, false);
c.LineTo(new Point(14, h), true, false);
}
g.Freeze();
Path p = new Path();
p.Data = g;
p.SnapsToDevicePixels = true;
p.Stroke = new SolidColorBrush(Colors.Black);
p.StrokeThickness = 1;
this.Canvas.Children.Clear();
this.Canvas.Children.Add(p);
}
}
}
Juste une intuition, mais essayez de régler SnapsToDevicePixels sur chaque élément dans l'arbre contenant le canevas. Accrochage d'un élément individuel aux pixels d'un périphérique n'aide pas si les vecteurs sont transformés en coordonnées non alignées plus haut dans le pipeline de rendu. –