Я реализую некоторые функции перетаскивания на древовидной структуре.WPF размытый adorner
Я пытаюсь нарисовать точку маркеров вставки, но это выходит размыто:
Как я могу сделать это делает ровным и острым?
Это мой шаблон:
<HierarchicalDataTemplate DataType="{x:Type localvm:TreeViewItemViewModel}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}">
<i:Interaction.Behaviors>
<b:TreeViewItemDragBehavior/>
<b:TreeViewItemDropBehavior/>
</i:Interaction.Behaviors>
</TextBlock>
Это моя логика визуализации:
protected override void OnRender(DrawingContext drawingContext)
{
Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);
SolidColorBrush renderBrush = new SolidColorBrush(Colors.Blue);
renderBrush.Opacity = 0.5;
Pen renderPen = new Pen(new SolidColorBrush(Colors.Blue), 1.5);
if (IsInUpperHalf)
{
drawingContext.DrawLine(renderPen, adornedElementRect.TopLeft, adornedElementRect.TopRight);
Point point1 = new Point(adornedElementRect.TopLeft.X + 10, adornedElementRect.TopLeft.Y);
Point point2 = new Point(adornedElementRect.TopLeft.X, adornedElementRect.TopLeft.Y + 3);
StreamGeometry leftStreamGeometry = new StreamGeometry();
using (StreamGeometryContext geometryContext = leftStreamGeometry.Open())
{
geometryContext.BeginFigure(adornedElementRect.TopLeft, true, true);
PointCollection points = new PointCollection { point1, point2 };
geometryContext.PolyLineTo(points, true, true);
drawingContext.DrawGeometry(Brushes.Blue, new Pen(Brushes.Blue, 1), leftStreamGeometry);
}
StreamGeometry rightStreamGeometry = new StreamGeometry();
using (StreamGeometryContext geometryContext = rightStreamGeometry.Open())
{
geometryContext.BeginFigure(adornedElementRect.TopRight, true, true);
PointCollection points = new PointCollection { point3, point4 };
geometryContext.PolyLineTo(points, true, true);
drawingContext.DrawGeometry(Brushes.Blue, new Pen(Brushes.Blue, 1), rightStreamGeometry);
}
}
}
Я играл с UseLayoutRounding
и SnapToDevicePixels
в конструкторе Adorner, но я, кажется, «Что-то не хватает.
, пожалуйста, введите код метода OnRender –
. Что вы думаете об этом? – Default
Возможно, вам понадобится [DrawingContext.PushGuidelineSet] (https://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext.pushguidelineset%28v=vs.110%29.aspx) в [ выровняйте линию с пикселями устройства] (https://msdn.microsoft.com/fr-fr/library/aa970908%28v=vs.85%29.aspx#guidelines). –