2017-02-23 1 views
1

OxyPlot을 사용하여 좌표계를 UserControl에 그려야했습니다. 불행하게도 두 가지 실수가 있습니다. 왜 그들이 거기에 서 있는지 나는 모른다. 그리고이 UserControl은 나중에 MainWindow 응용 프로그램의 특정 버튼을 누를 때 내 MainWindow에 있습니다.UserControl에서 C# WPF Draw OxyPlot

누군가가 오류가있는 곳을 알려주고 해결할 수 있습니까?

다른 응용 프로그램에서도 작동합니다. 이것은 또한 UserControl이 아니라 MainWindow입니다.

오류 :

  • 는 "UCScreen는" "제목"에 대한 정의를 포함하지 않는, 당신은 첫 번째 UCVoucher 유형을 인수를 받아들이는 제목 확장 방법을 찾을 수 없습니다

  • "작성자"이름이 현재 컨텍스트에 없습니다.

내가 코멘트와 함께 코드에서 오류를 표시 한

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 클래스입니다.

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

아니면 UserControl 클래스에 Title 속성을 추가해야합니다 : 당신은 아마이 일을 설정할

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

public string Title { get; set; } 

그런 다음 당신이 일을해야하는 XAML 마크 업에서 정의하는 것이 바인딩.

"제작자"와 관련하여 나는 그것이 무엇인지 알지 못합니다. 을 Points 컬렉션에 추가하고 있기 때문에이 줄을 제거 할 수도 있습니다. 또는 당신은 당신이 당신의 XAML 마크 업에 정의 된 "LS"LineSeries에 직접 DataPoint을 추가 할 수 있습니다

ls.addPoint(zufallszahlX, zufallszahlY); 
+0

감사합니다, 나는이 줄을 제거하고 오류없이 일했다. – GabelUndMesser

관련 문제