#wpf
#wpf
Вопрос:
Смотрите изображение. Я бы хотел, чтобы средняя линия была четкой линией в 1 пиксель. Вы можете скопировать и вставить образец разметки в kaxaml .
альтернативный текст http://img832.imageshack.us/img832/1704/lines.png
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image SnapsToDevicePixels="True" Stretch="None">
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Red" Thickness="1"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="0,0" EndPoint="50,0"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="1"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="0,5.860" EndPoint="50,5.860"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="1"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="0,12" EndPoint="50,12"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Page>
Ответ №1:
Я нашел решение по адресу: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.setedgemode.aspx
<Image Stretch="None" RenderOptions.EdgeMode="Aliased">
RenderOptions.SetEdgeMode(this, EdgeMode.Aliased);
Комментарии:
1. Сработало отлично и оправдало мое использование изображения с DrawingImage в качестве исходного в отличие от техники DrawingBrush, которую я обычно использую для значков XAML.
Ответ №2:
Измените среднюю линию на:
<LineGeometry StartPoint="0,6" EndPoint="50,6"/>
Вы можете получить четкую линию на границе пикселя, поместив линию на целую пронумерованную единицу.
Комментарии:
1. Я ищу общее решение, например, флаг. У меня была похожая проблема в CoreGraphics, и решением было перевести преобразовать мой контекст 0.5, 0.5
Ответ №3:
Я видел аналогичную проблему с пограничным контролем, хотя @phi ваше решение работало в большинстве случаев, мне также пришлось добавить следующее, чтобы заставить его полностью работать:
SnapsToDevicePixels="True"