2017-02-23 16 views
1

OxyPlotを使用して座標系をUserControlに描画したかったのです。残念ながら、2つの間違いがあります。なぜ彼らがそこに立っているのか分かりません。そして、このUserControlはMainWindowアプリケーションの特定のボタンを押したときに、MainWindowの後に表示されます。UserControlのC#WPF描画OxyPlot

エラーがどこにあるのか誰かに教えてもらえますか?

これは別のアプリケーションで動作します。これもUserControlではなくMainWindowです。

エラー:

  • 「UCScreen」は「タイトル」の定義が含まれていない、とあなたは 最初UCVoucherタイプ 引数

  • を受け付けタイトル拡張メソッドを見つけることができませんでした
  • "creator"という名前は現在のコンテキストに存在しません。

私はコメントでコード内のエラーをマークしている

の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> 

答えて

1

UserControlクラスにはTitleプロパティbを持っていませんそれにはPlotクラスがあります。動作するはずですあなたはXAMLマークアップで定義することを結合すると

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

public string Title { get; set; } 

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

それとも、UserControlクラスにTitleプロパティを追加する必要があります:あなたはおそらく、このいずれかを設定します。

"クリエイター"に関して、私はそれが何であるか分かりません。 DataPointPointsコレクションに追加しているので、この行を削除することもできます。それとも、あなたがあなたのXAMLマークアップで定義されている「LS」LineSeriesに直接DataPointを追加することができます。

ls.addPoint(zufallszahlX, zufallszahlY); 
+0

おかげで、私はこの行を削除しているし、エラーなしで働いています。 – GabelUndMesser