2017-02-23 46 views
1

我想用UserControl中的OxyPlot绘制坐标系。不幸的是,有两个错误。我不知道他们为什么站在那里。然后,当用户按下MainWindow应用程序中的某个按钮时,此用户控件随后会出现在我的主窗口中。C#WPF在UserControl中绘制OxyPlot

有人能告诉我错误在哪里并修复它吗?

这适用于其他应用程序。这也不是UserControl,而是MainWindow。

错误:

  • “UCScreen”不包含“标题”的定义,你可以 找不到接受第一UCVoucher类型 参数标题的扩展方法

  • 当前上下文中不存在名称“创建者”。

我有一个注释标记在代码中的错误

用户控件

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> 

回答

1

UserControl类没有Title性质B类有Plot。你可能想设置这样一个:

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

还是应该一个Title属性添加到UserControl类:

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

public string Title { get; set; } 

然后结合你在XAML标记应该工作定义。

关于“创造者”,我不知道那是什么。由于您将DataPoint添加到Points集合中,所以您可能会删除此行。或者你也可以直接添加到DataPoint您在XAML标记所定义的“LS” LineSeries

ls.addPoint(zufallszahlX, zufallszahlY); 
+0

谢谢,我已经删除了这条线,并且在没有错误的工作。 – GabelUndMesser