The next code solves the problem making shapes to be drawn in physical screen pixels:
canvas.RenderTransform = new MatrixTransform(
PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice);
The fixed version of the code i wrote in the question:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
Canvas canvas;
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
canvas = new Canvas();
canvas.Background = Brushes.Black;
this.Content = canvas;
RenderOptions.SetEdgeMode(canvas, EdgeMode.Aliased);
canvas.SnapsToDevicePixels = true;
canvas.RenderTransform = new MatrixTransform(
PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice);
Shape();
}
double i = 0;
private void Shape()
{
canvas.Children.Clear();
for (double i = 0; i < 20; i += 2)
{
Line line = new Line();
line.X1 = 30;
line.Y1 = 30 + i;
line.X2 = 100;
line.Y2 = 30 + i;
line.Stroke = Brushes.White;
line.StrokeThickness = 1;
canvas.Children.Add(line);
}
}
}
Codeproject lags.
Source[
^].