2017-02-23 2 views
1

Ich wollte ein Koordinatensystem mit OxyPlot in einem UserControl zeichnen. Leider gibt es zwei Fehler. Ich weiß nicht, warum sie dort stehen. Und dieses UserControl dann später in meinem MainWindow, wenn man auf eine bestimmte Schaltfläche in der MainWindow-Anwendung drückt.C# WPF Zeichnen OxyPlot in UserControl

Kann mir jemand sagen, wo der Fehler liegt und es beheben?

Dies funktioniert in einer anderen Anwendung. Dies ist auch nicht UserControl, sondern MainWindow.

Fehler:

  • "UCScreen" keine Definition für "Titel" enthalten, und man konnte keinen Titel Erweiterungsmethode finden, die einem ersten UCVoucher Typ Argument akzeptiert

  • Der Name "Ersteller" existiert im aktuellen Kontext nicht.

Ich habe

Usercontrol

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using OxyPlot; 
using OxyPlot.Series; 
using System.IO; 
using System.Text.RegularExpressions; 
using System.Collections; 
using System.Globalization; 

namespace Vorschau 
{ 
    /// <summary> 
    /// Interaktionslogik für UCVorschau.xaml 
    /// </summary> 
    public partial class UCVorschau : UserControl 
    { 
     public UCVorschau() 
     { 
      InitializeComponent(); 
      DataContext = this; //Here is an error 
      this.Title = "Vorschaubild"; 
     } 

     public IList<DataPoint> Points { get; private set; } 

     /// <summary> 
     /// Einstelungs-Fenster wird geöffnet 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e"></param> 
     //btEinstellung 


     private void btGenerate_Click(object sender, RoutedEventArgs e) 
     { 
      DateTime startZeit = DateTime.Now; 
      Cursor = Cursors.Wait; 

      double zufallszahlX; 
      double zufallszahlY; 

      double XMax = 10; 
      double XMin = 0; 
      double YMax = 10; 
      double YMin = 0; 
      // Zur Erstellung des Seeds 
      int h = DateTime.Now.Hour; 
      int m = DateTime.Now.Minute; 
      int s = DateTime.Now.Second; 
      String u = h.ToString() + m.ToString() + s.ToString(); 
      int iu = Int32.Parse(u); 
      Random zufall = new Random(iu); 
      Console.WriteLine("______________"); 
      CultureInfo en = new CultureInfo("en-US", false); // Damit ein Punkt ist anstatt ein Komma 
      DataContext = this; 
      this.Points = new List<DataPoint>(); 
      System.IO.File.WriteAllText(((Environment.CurrentDirectory + @"\files\koordinaten.txt")), string.Empty); 
      using (var fileStream = new FileStream(String.Format(Environment.CurrentDirectory + @"\files\koordinaten.txt"), FileMode.OpenOrCreate)) 
      using (var streamWriter = new StreamWriter(fileStream)) 
      { 
       for (int i = 1; i <= 10; i++) 
       { 
        zufallszahlX = zufall.NextDouble() * (XMax - XMin) + XMin; 
        zufallszahlY = zufall.NextDouble() * (YMax - YMin) + YMin; 
        //Console.WriteLine("(" + zufallszahlX + "/" + zufallszahlY + ")" + " |" + i); 
        streamWriter.WriteLine("(" + zufallszahlX.ToString(en.NumberFormat) + "/" + zufallszahlY.ToString(en.NumberFormat) + ")" + " |" + i); 
        creator.addPoint(zufallszahlX, zufallszahlY); //Here is an error 
        Points.Add(new DataPoint(zufallszahlX, zufallszahlY)); 
       } 
       ls.ItemsSource = Points; 
      } 
      Cursor = Cursors.Arrow; 
      DateTime endZeit = DateTime.Now; 
      TimeSpan gemesseneZeit = endZeit - startZeit; 
      // statusbar.Text = "Gemessen Zeit für den Durchlauf: " + gemesseneZeit; 
     } 
    } 
} 

<UserControl x:Class="Vorschau.UCVorschau" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Vorschau" 
      xmlns:oxy="http://oxyplot.org/wpf" 
      mc:Ignorable="d" Height="461" Width="624"> 
    <Canvas HorizontalAlignment="Left" Height="461" VerticalAlignment="Top" Width="624"> 
     <Button x:Name="btGenerate" Content="Generiere Koordinaten" Canvas.Left="25" Canvas.Top="409" Click="btGenerate_Click"/> 
     <oxy:Plot x:Name="oxyPlot" Title="{Binding Title}" Height="245" Canvas.Left="298" Canvas.Top="32" Width="273" Background="#FFD1CFD0"> 
      <oxy:Plot.Series> 
       <oxy:LineSeries x:Name="ls" ItemsSource="{Binding Points}" LineStyle="None" MarkerType="Square" MarkerSize="5" MarkerFill="Black"/> 
      </oxy:Plot.Series> 

     </oxy:Plot> 
    </Canvas> 
</UserControl> 

Antwort

1

Die UserControl Klasse hat keine Title Eigenschaft b die Fehler im Code mit einem Kommentar markiert ut die Plot Klasse hat. Wahrscheinlich wollen Sie diese ein setzen:

public UCVorschau() 
{ 
    InitializeComponent(); 
    DataContext = this; //Here is an error 
    oxyPlot.Title = "Vorschaubild"; 
} 

Oder Sie sollten eine Title Eigenschaft auf die UserControl Klasse hinzufügen:

public UCVorschau() 
{ 
    InitializeComponent(); 
    DataContext = this; //Here is an error 
    this.Title = "Vorschaubild"; 
} 

public string Title { get; set; } 

Dann ist die Bindung, die Sie in der XAML-Markup definieren sollte funktionieren.

In Bezug auf den "Schöpfer" weiß ich nicht, was das ist. Da Sie die DataPoint zu der Points Sammlung hinzufügen, können Sie diese Linie auch entfernen, denke ich. Oder Sie könnten die DataPoint direkt an die „ls“ hinzufügen LineSeries, die Sie in Ihrem XAML-Markup definiert haben:

ls.addPoint(zufallszahlX, zufallszahlY); 
+0

Danke, habe ich diese Linie entfernt und hat ohne Fehler gearbeitet. – GabelUndMesser