2016-05-04 10 views
1

Ich entschuldige mich für solch eine grundlegende Frage, wenn es ist.Wie fülle ich zwischen zwei parallelen Linien WPF?

Das Problem ist, ich soll zwei parallele Linien oder zwei parallele Kurven auf einer Leinwand zeichnen. Ich möchte eine Farbe zwischen diesen beiden sich nicht überschneidenden Linien setzen. Ich verwende zwei Polylinien, um sie zu zeichnen.

Jede Hilfe wird geschätzt. Danke im Voraus. Code:

<Canvas.LayoutTransform> 
     <ScaleTransform CenterX="0" CenterY="0" ScaleY="-1" ScaleX="1"/> 
    </Canvas.LayoutTransform> 
    <Polyline Name="MyLine1" Points="{Binding BindPoints1,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" Grid.Row="0" /> 
    <Polyline Name="MyLine2" Points="{Binding BindPoints2,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" Grid.Row="0" /> 

und C#

public class ViewModel : ViewModelBase 
{ 
    private ImageSource m_CreatedImage; 
    public PointCollection BindPoints1 { get; set; } 
    public PointCollection BindPoints2 { get; set; } 


    public ViewModel() 
    { 
     BindPoints1 = new PointCollection(); 
     BindPoints2 = new PointCollection(); 
     for (int i = 0; i < 1000; i++) 
     { 
      double val = (i * i) - 5; 
      var point = new Point(i, i+20);    
      BindPoints1.Add(point); 
     } 

     BindPoints2 = new PointCollection(); 
     for (int i = 0; i < 1000; i++) 
     { 
      double val = (i * i) + 5; 
      var point = new Point(i, i-20); 
      BindPoints2.Add(point); 
     } 
    } 


} 
+0

Ihre beste Wette ist wahrscheinlich die Linien zu Polygonen und Bögen zu Kreisen konvertieren dann Schicht und füllen Sie sie so, dass Sie das Aussehen, die Sie wollen. –

Antwort

0

Erstellen Sie eine dritte Punktsammlung, die alle Punkte der ersten Zeile und alle Punkte der zweiten Zeile enthält. Die Punkte in der zweiten Zeile müssen umgekehrt werden. Denke daran, als würdest du an einer Seite ans Ende einer Straße gehen, die Straße überqueren, dann auf der anderen Seite zurückkommen.

Bind ein neues Line diesen dritten Satz von Punkten und stellte Fill anstelle die Stroke und es ziehen, bevor Sie andere Linien/Bogen zeichnen.

<Polyline Name="FillLine" Points="{Binding BindPoints3,Mode=TwoWay}" Fill="Green" Grid.Row="0"/> 
<Polyline Name="MyLine1" Points="{Binding BindPoints1,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" Grid.Row="0" /> 
<Polyline Name="MyLine2" Points="{Binding BindPoints2,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" Grid.Row="0" /> 

Ansicht Modell:

public class ViewModel : ViewModelBase 
{ 
    private ImageSource m_CreatedImage; 
    public PointCollection BindPoints1 { get; set; } 
    public PointCollection BindPoints2 { get; set; } 
    public PointCollection BindPoints3 { get; set; } 


    public ViewModel() 
    { 
     BindPoints1 = new PointCollection(); 
     BindPoints2 = new PointCollection(); 
     for (int i = 0; i < 1000; i++) 
     { 
      double val = (i * i) - 5; 
      var point = new Point(i, i + 20); 
      BindPoints1.Add(point); 
     } 

     BindPoints2 = new PointCollection(); 
     for (int i = 0; i < 1000; i++) 
     { 
      double val = (i * i) + 5; 
      var point = new Point(i, i - 20); 
      BindPoints2.Add(point); 
     } 
     BindPoints3 = new PointCollection(BindPoints1.OfType<Point>().Concat(BindPoints2.OfType<Point>().Reverse())); 
    } 
} 
1

Das Beste ist, um ein Raster zu definieren und in 4-5 Zeilen zuerst unterteilen. In der ersten und letzten Zeile die Zeile hinzufügen. Spannen Sie die mittleren 2-3 Reihen und fügen Sie eine Form hinzu, sagen Sie Rechteck oder Ellipse gemäß Ihrer Anforderung, und füllen Sie sie einfach mit der gewünschten Farbe.

Überprüfen Sie das folgende Beispiel.

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApplication1" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" 
    > 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Polyline Name="MyLine1" Grid.Row="0" Points="{Binding BindPoints1,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" /> 
      <Polyline Name="MyLine2" Grid.Row="4" Points="{Binding BindPoints2,Mode=TwoWay}" Stroke="Black" StrokeThickness="4" /> 
      <Rectangle Grid.Row="1" Grid.RowSpan="3" Fill="Red" /> 

    </Grid> 
</Window> 
Verwandte Themen