代码之家  ›  专栏  ›  技术社区  ›  bmustata

为什么路径和多段线在WPF中有不同的渲染?

  •  3
  • bmustata  · 技术社区  · 16 年前

    为什么路径和多段线在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>
    

    混合图像样本: http://img190.imageshack.us/img190/2965/wpfsmaple.png

    开发系统: WinXP SP2,与2008+SP1相比

    2 回复  |  直到 13 年前
        1
  •  3
  •   Joshua Cauble    16 年前

    它与非文本对象的绘制模式有关。我试着像下面链接的文章所说的那样设置polyline对象,它确实使它看起来像路径。

    所以,简短的回答是,这与消除混叠有关。这是一篇文章: Single Pixel Lines

    如果您希望在这里使用命令,请为折线命名,然后将以下内容添加到代码后面。

    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>
    

    这将使折线对象看起来像路径对象。但是,将路径更改为“未指定”并不起任何作用,因此可以使其他对象看起来与路径类似,但反之亦然。

        2
  •  2
  •   Chuck Rostance    13 年前

    将其放入路径或折线XAML标记中

    RenderOptions.EdgeMode="Aliased"