Почему у Path и Polyline разные визуализации в WPF? - PullRequest
3 голосов
/ 06 января 2010

Почему у Path и Polyline разные визуализации в WPF?

Это происходит как в коде, так и в смеси, возможно, я что-то упустил или это это просто эффект сглаживания.

<Window
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 x:Class="GeometryMonky.Window1"
 x:Name="Window"
 Title="Window1"
 Width="640" Height="480" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">

 <Grid x:Name="LayoutRoot">
  <Path Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF0000FF" Margin="100,10,0,0" Data="M289,39 L333,173" Width="1" HorizontalAlignment="Left" Height="100" StrokeThickness="1"/>

  <Polyline Stroke="#FF0000FF" Margin="115,178,417,168" StrokeThickness="1" Width="100" Height="100">
   <Polyline.Points>
    <Point>10,0</Point>
    <Point>10,100</Point>
   </Polyline.Points>
  </Polyline>
 </Grid>
</Window>

Образец изображения из Blend: http://img190.imageshack.us/img190/2965/wpfsmaple.png

Система разработки: WinXP SP2, VS 2008 + SP1

Ответы [ 2 ]

3 голосов
/ 14 января 2010

Это связано с режимами рисования нетекстовых объектов. Я попытался установить объект ломаной линии, как сказано в статье, указанной ниже, и он действительно выглядит как путь.

Итак, короткий ответ - это связано с сглаживанием. Вот статья: Однопиксельные линии

Если вы хотите, чтобы команда была здесь, дайте вашей полилинии Имя, а затем добавьте следующее к коду.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
        // THIS IS THE LINE THATS IMPORTANT
        pLine.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
   }
}

Ваш xaml изменить здесь:

<Polyline x:Name="pLine" Stroke="#FF0000FF" Margin="115,178,417,168" StrokeThickness="1" Width="100" Height="100">
  <Polyline.Points>
    <Point>10,0</Point>
    <Point>10,100</Point>
   </Polyline.Points>
</Polyline>

Это сделает ваш объект ломаной линии похожим на ваш объект Path. Однако изменение пути для использования неопределенного ничего не делает, поэтому вы можете заставить другие ваши объекты выглядеть аналогично пути, но не наоборот.

2 голосов
/ 20 апреля 2013

Поместите это в тэг Path или Polyline xaml.

RenderOptions.EdgeMode="Aliased"
...