[英]C# WPF Draw OxyPlot in UserControl
I wanted to draw a coordinate system with OxyPlot in a UserControl.我想在 UserControl 中使用 OxyPlot 绘制坐标系。 Unfortunately, there are two mistakes.
不幸的是,有两个错误。 I do not know why they are standing there.
我不知道他们为什么站在那里。 And this UserControl then later in my MainWindow when one presses on a certain button in the MainWindow application.
当按下 MainWindow 应用程序中的某个按钮时,这个 UserControl 然后在我的 MainWindow 中。
Can someone tell me where the error lies and fix it?有人可以告诉我错误在哪里并修复它吗?
This works in another application.这适用于另一个应用程序。 This is also not UserControl but MainWindow.
这也不是 UserControl,而是 MainWindow。
Errors:错误:
"UCScreen" does not contain a definition for "Title", and you could not find a title extension method that accepts a first UCVoucher type argument
“UCScreen”不包含“Title”的定义,并且您找不到接受第一个 UCVoucher 类型参数的标题扩展方法
The name "creator" does not exist in the current context.
当前上下文中不存在名称“创建者”。
I have marked the errors in the code with a comment我用注释标记了代码中的错误
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>
The UserControl
class has no Title
property but the Plot
class has. UserControl
类没有Title
属性,但Plot
类有。 You probably want to set this one:你可能想设置这个:
public UCVorschau()
{
InitializeComponent();
DataContext = this; //Here is an error
oxyPlot.Title = "Vorschaubild";
}
Or you should add a Title
property to the UserControl
class:或者您应该向
UserControl
类添加一个Title
属性:
public UCVorschau()
{
InitializeComponent();
DataContext = this; //Here is an error
this.Title = "Vorschaubild";
}
public string Title { get; set; }
Then the binding that you define in the XAML markup should work.然后您在 XAML 标记中定义的绑定应该可以工作。
Regarding the "creator" I don't know what that is.关于“创造者”,我不知道那是什么。 Since you are adding the
DataPoint
to the Points
collection you might as well remove this line I guess.由于您将
DataPoint
添加到Points
集合中,因此我猜您最好删除此行。 Or you could add the DataPoint
directly to the "ls" LineSeries
that you have defined in your XAML markup:或者,您可以将
DataPoint
直接添加到您在 XAML 标记中定义的“ls” LineSeries
:
ls.addPoint(zufallszahlX, zufallszahlY);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.