oxyPlot删除坐标点
oxyPlot delete coordinate points
我正在使用带有 OxyPlot 的 C# WPF 应用程序
如何重新从坐标系中删除坐标点?是否有 "clear" 命令?
例如,如果我点击一个按钮,"circles" 会在坐标系
中消失
我试过
Points.Clear();
不幸的是错误的方法你对我来说是正确的方法,因为我可以在坐标系中删除我的坐标?
<Window x:Class="TestOxyPlot.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:oxy="http://oxyplot.org/wpf"
xmlns:local="clr-namespace:TestOxyPlot"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<oxy:Plot x:Name="oxyPlot" Title="{Binding Title}" Margin="207,53,0,0">
<oxy:Plot.Axes>
<oxy:LinearAxis Position="Bottom" MinimumPadding="0.1" MaximumPadding="0.1"/>
<oxy:LinearAxis Position="Left" MinimumPadding="0.1" MaximumPadding="0.1"/>
</oxy:Plot.Axes>
<oxy:Plot.Series>
<oxy:LineSeries x:Name="ls" ItemsSource="{Binding Points}" LineStyle="None" MarkerType="Square" MarkerSize="5" MarkerFill="Black"/>
</oxy:Plot.Series>
</oxy:Plot>
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="44,64,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" MouseLeave="textBox_MouseLeave" TextChanged="textBox_TextChanged"/>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="44,101,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" TextChanged="textBox1_TextChanged"/>
<Button x:Name="button" Content="Generate" HorizontalAlignment="Left" Margin="68,174,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
<Button x:Name="btClear" Content="Clear" HorizontalAlignment="Left" Margin="68,225,0,0" VerticalAlignment="Top" Width="75" Click="btClear_Click"/>
<Slider x:Name="slider" HorizontalAlignment="Left" Margin="17,10,0,0" VerticalAlignment="Top" Minimum="200" Maximum="400" ValueChanged="slider_ValueChanged" SmallChange="1" Width="400"/>
<Button x:Name="btBitmap" Content="Bitmap" HorizontalAlignment="Left" Margin="68,139,0,0" VerticalAlignment="Top" Width="75" Click="btBitmap_Click"/>
</Grid>
</Window>
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;
namespace TestOxyPlot
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
oxyPlot.Width = 200;
oxyPlot.Height = 200;
DataContext = this;
this.Title = "Example 2";
double zufallszahlX;
double zufallszahlY;
// 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);
zufallszahlX = zufall.NextDouble() * (10 - -10) + -10;
zufallszahlY = zufall.NextDouble() * (10 - -10) + -10;
this.Points = new List<DataPoint>
{
new DataPoint(zufallszahlX, zufallszahlY)
/* new DataPoint(10, 13),
new DataPoint(20, 15),
new DataPoint(30, 16),
new DataPoint(40, 12),
new DataPoint(50, 12),
new DataPoint(-50, -4.54541212) */
};
}
//public string Title { get; private set; }
public IList<DataPoint> Points { get; private set; }
private void textBox_MouseLeave(object sender, MouseEventArgs e)
{
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
oxyPlot.Width = Int32.Parse(textBox.Text);
}
catch (Exception error)
{
MessageBox.Show("Mistake: " + error);
}
}
private void button_Click(object sender, RoutedEventArgs e)
{
double randomNumX;
double randomNumY;
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);
Points = new List<DataPoint>();
for (int i = 0; i < 10; i++)
{
randomNumX = zufall.NextDouble() * (10 - -10) + -10;
randomNumY = zufall.NextDouble() * (10 - -10) + -10;
Points.Add(new DataPoint(randomNumX, randomNumY));
}
Points.Add(new DataPoint(0, 0));
Points.Add(new DataPoint(-10, -10));
ls.ItemsSource = Points;
}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
oxyPlot.Height = Int32.Parse(textBox1.Text);
}
catch (Exception error)
{
MessageBox.Show("Mistake: " + error);
}
}
private void btClear_Click(object sender, RoutedEventArgs e)
{
Points.Clear();
}
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
oxyPlot.Width = slider.Value;
}
private void btBitmap_Click(object sender, RoutedEventArgs e)
{
oxyPlot.ToBitmap();
}
}
}
您可以将 ItemsSource
设置为 null
:
private void btClear_Click(object sender, RoutedEventArgs e)
{
ls.ItemsSource = null;
}
编辑
如果您不想改变轴的值,您可以设置最小值和最大值属性:
private void btClear_Click(object sender, RoutedEventArgs e)
{
botAxis.Minimum = botAxis.InternalAxis.ActualMinimum;
botAxis.Maximum = botAxis.InternalAxis.ActualMaximum;
lefAxis.Minimum = lefAxis.InternalAxis.ActualMinimum;
lefAxis.Maximum = lefAxis.InternalAxis.ActualMaximum;
ls.ItemsSource = null;
}
首先,不要混淆 DataBinding 和 CodeBehind-Operations。
您以正确的方式绑定了积分。但是你需要使用 ObservableCollection<T>
覆盖 ItemsSource 会在您的应用程序中产生意外行为。
请参阅以下代码,了解我是如何让它工作的:
public Window1() {
InitializeComponent();
oxyPlot.Width = 200;
oxyPlot.Height = 200;
this.Title = "Example 2";
double zufallszahlX;
double zufallszahlY;
// Zur Erstellung des Seeds
int h = DateTime.Now.Hour;
int m = DateTime.Now.Minute;
int s = DateTime.Now.Second;
string u = h + m.ToString() + s;
int iu = Int32.Parse(u);
var zufall = new Random(iu);
zufallszahlX = zufall.NextDouble() * (10 - -10) + -10;
zufallszahlY = zufall.NextDouble() * (10 - -10) + -10;
this.Points = new ObservableCollection<DataPoint> { new DataPoint(zufallszahlX, zufallszahlY) };
this.DataContext = this;
}
public ObservableCollection<DataPoint> Points {
get;
}
private void textBox_MouseLeave(object sender, MouseEventArgs e) {
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e) {
try {
oxyPlot.Width = Int32.Parse(textBox.Text);
} catch (Exception error) {
MessageBox.Show("Mistake: " + error);
}
}
private void button_Click(object sender, RoutedEventArgs e) {
double randomNumX;
double randomNumY;
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);
for (int i = 0; i < 10; i++) {
randomNumX = zufall.NextDouble() * (10 - -10) + -10;
randomNumY = zufall.NextDouble() * (10 - -10) + -10;
Points.Add(new DataPoint(randomNumX, randomNumY));
}
Points.Add(new DataPoint(0, 0));
Points.Add(new DataPoint(-10, -10));
}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e) {
try {
oxyPlot.Height = Int32.Parse(textBox1.Text);
} catch (Exception error) {
MessageBox.Show("Mistake: " + error);
}
}
private void btClear_Click(object sender, RoutedEventArgs e) {
Points.Clear();
}
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
oxyPlot.Width = slider.Value;
}
private void btBitmap_Click(object sender, RoutedEventArgs e) {
oxyPlot.ToBitmap();
}
我保留了 XAML 原样。
备注
虽然其他答案可能有效,但如果您的应用程序变得更复杂,它可能会产生一些问题
我正在使用带有 OxyPlot 的 C# WPF 应用程序
如何重新从坐标系中删除坐标点?是否有 "clear" 命令? 例如,如果我点击一个按钮,"circles" 会在坐标系
中消失我试过
Points.Clear();
不幸的是错误的方法你对我来说是正确的方法,因为我可以在坐标系中删除我的坐标?
<Window x:Class="TestOxyPlot.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:oxy="http://oxyplot.org/wpf"
xmlns:local="clr-namespace:TestOxyPlot"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<oxy:Plot x:Name="oxyPlot" Title="{Binding Title}" Margin="207,53,0,0">
<oxy:Plot.Axes>
<oxy:LinearAxis Position="Bottom" MinimumPadding="0.1" MaximumPadding="0.1"/>
<oxy:LinearAxis Position="Left" MinimumPadding="0.1" MaximumPadding="0.1"/>
</oxy:Plot.Axes>
<oxy:Plot.Series>
<oxy:LineSeries x:Name="ls" ItemsSource="{Binding Points}" LineStyle="None" MarkerType="Square" MarkerSize="5" MarkerFill="Black"/>
</oxy:Plot.Series>
</oxy:Plot>
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="44,64,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" MouseLeave="textBox_MouseLeave" TextChanged="textBox_TextChanged"/>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="44,101,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" TextChanged="textBox1_TextChanged"/>
<Button x:Name="button" Content="Generate" HorizontalAlignment="Left" Margin="68,174,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
<Button x:Name="btClear" Content="Clear" HorizontalAlignment="Left" Margin="68,225,0,0" VerticalAlignment="Top" Width="75" Click="btClear_Click"/>
<Slider x:Name="slider" HorizontalAlignment="Left" Margin="17,10,0,0" VerticalAlignment="Top" Minimum="200" Maximum="400" ValueChanged="slider_ValueChanged" SmallChange="1" Width="400"/>
<Button x:Name="btBitmap" Content="Bitmap" HorizontalAlignment="Left" Margin="68,139,0,0" VerticalAlignment="Top" Width="75" Click="btBitmap_Click"/>
</Grid>
</Window>
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;
namespace TestOxyPlot
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
oxyPlot.Width = 200;
oxyPlot.Height = 200;
DataContext = this;
this.Title = "Example 2";
double zufallszahlX;
double zufallszahlY;
// 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);
zufallszahlX = zufall.NextDouble() * (10 - -10) + -10;
zufallszahlY = zufall.NextDouble() * (10 - -10) + -10;
this.Points = new List<DataPoint>
{
new DataPoint(zufallszahlX, zufallszahlY)
/* new DataPoint(10, 13),
new DataPoint(20, 15),
new DataPoint(30, 16),
new DataPoint(40, 12),
new DataPoint(50, 12),
new DataPoint(-50, -4.54541212) */
};
}
//public string Title { get; private set; }
public IList<DataPoint> Points { get; private set; }
private void textBox_MouseLeave(object sender, MouseEventArgs e)
{
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
oxyPlot.Width = Int32.Parse(textBox.Text);
}
catch (Exception error)
{
MessageBox.Show("Mistake: " + error);
}
}
private void button_Click(object sender, RoutedEventArgs e)
{
double randomNumX;
double randomNumY;
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);
Points = new List<DataPoint>();
for (int i = 0; i < 10; i++)
{
randomNumX = zufall.NextDouble() * (10 - -10) + -10;
randomNumY = zufall.NextDouble() * (10 - -10) + -10;
Points.Add(new DataPoint(randomNumX, randomNumY));
}
Points.Add(new DataPoint(0, 0));
Points.Add(new DataPoint(-10, -10));
ls.ItemsSource = Points;
}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
oxyPlot.Height = Int32.Parse(textBox1.Text);
}
catch (Exception error)
{
MessageBox.Show("Mistake: " + error);
}
}
private void btClear_Click(object sender, RoutedEventArgs e)
{
Points.Clear();
}
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
oxyPlot.Width = slider.Value;
}
private void btBitmap_Click(object sender, RoutedEventArgs e)
{
oxyPlot.ToBitmap();
}
}
}
您可以将 ItemsSource
设置为 null
:
private void btClear_Click(object sender, RoutedEventArgs e)
{
ls.ItemsSource = null;
}
编辑
如果您不想改变轴的值,您可以设置最小值和最大值属性:
private void btClear_Click(object sender, RoutedEventArgs e)
{
botAxis.Minimum = botAxis.InternalAxis.ActualMinimum;
botAxis.Maximum = botAxis.InternalAxis.ActualMaximum;
lefAxis.Minimum = lefAxis.InternalAxis.ActualMinimum;
lefAxis.Maximum = lefAxis.InternalAxis.ActualMaximum;
ls.ItemsSource = null;
}
首先,不要混淆 DataBinding 和 CodeBehind-Operations。
您以正确的方式绑定了积分。但是你需要使用 ObservableCollection<T>
覆盖 ItemsSource 会在您的应用程序中产生意外行为。
请参阅以下代码,了解我是如何让它工作的:
public Window1() {
InitializeComponent();
oxyPlot.Width = 200;
oxyPlot.Height = 200;
this.Title = "Example 2";
double zufallszahlX;
double zufallszahlY;
// Zur Erstellung des Seeds
int h = DateTime.Now.Hour;
int m = DateTime.Now.Minute;
int s = DateTime.Now.Second;
string u = h + m.ToString() + s;
int iu = Int32.Parse(u);
var zufall = new Random(iu);
zufallszahlX = zufall.NextDouble() * (10 - -10) + -10;
zufallszahlY = zufall.NextDouble() * (10 - -10) + -10;
this.Points = new ObservableCollection<DataPoint> { new DataPoint(zufallszahlX, zufallszahlY) };
this.DataContext = this;
}
public ObservableCollection<DataPoint> Points {
get;
}
private void textBox_MouseLeave(object sender, MouseEventArgs e) {
}
private void textBox_TextChanged(object sender, TextChangedEventArgs e) {
try {
oxyPlot.Width = Int32.Parse(textBox.Text);
} catch (Exception error) {
MessageBox.Show("Mistake: " + error);
}
}
private void button_Click(object sender, RoutedEventArgs e) {
double randomNumX;
double randomNumY;
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);
for (int i = 0; i < 10; i++) {
randomNumX = zufall.NextDouble() * (10 - -10) + -10;
randomNumY = zufall.NextDouble() * (10 - -10) + -10;
Points.Add(new DataPoint(randomNumX, randomNumY));
}
Points.Add(new DataPoint(0, 0));
Points.Add(new DataPoint(-10, -10));
}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e) {
try {
oxyPlot.Height = Int32.Parse(textBox1.Text);
} catch (Exception error) {
MessageBox.Show("Mistake: " + error);
}
}
private void btClear_Click(object sender, RoutedEventArgs e) {
Points.Clear();
}
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
oxyPlot.Width = slider.Value;
}
private void btBitmap_Click(object sender, RoutedEventArgs e) {
oxyPlot.ToBitmap();
}
我保留了 XAML 原样。
备注
虽然其他答案可能有效,但如果您的应用程序变得更复杂,它可能会产生一些问题