添加 OxyPlot PointAnnotation
Add OxyPlot PointAnnotation
我目前正在尝试向 OxyPlot 图表添加一个点。我想使用 PointAnnotation class(因为它是一个基于 X 和 Y 值的单点,应该绑定到模型中的实际值)。问题是我通过 PointAnnotation 创建的点实际上根本没有显示出来。我看过 OxyPlot 文档,我认为我做对了。我还查看了其他一些问题(this and this 似乎最相关),但其中 none 适用,因为我试图添加一个点并将 X 和 Y 坐标绑定到值在模型中。我想要的只是一个标记特定点的漂亮符号,我希望能够在 XAML 中完成它,以便使用绑定进行自动更新。这不可能吗?
我正在尝试这个,在 XAML 中(这是较大代码的片段,我只包含了相关部分):
<UserControl x:Class="MyNamespace:MyControl"
xmlns:oxy="http://oxyplot.org/wpf"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<oxy:Plot>
<oxy:Plot.Annotations>
<oxy:PointAnnotation X="{Binding Path=XVal, Mode=OneWay}" Y="{Binding Path=YVal, Mode=OneWay}" Shape="Star" Stroke="Black" Fill="Black" Visibility="Visible"/>
</oxy:Plot.Annotations>
</oxy:Plot>
</UserControl>
在代码隐藏中:
public partial class MyControl : UserControl
{
public MyControl()
{
Model = new MyModel();
DataContext = Model;
InitializeComponent();
}
// Other stuff...
}
并且在模型中(同样,只有相关部分):
public class MyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private double _xVal, _yVal;
public double XVal
{
get { return _xVal; }
private set
{
if (_xVal == value) return;
_xVal = value;
OnPropertyChanged("XVal");
}
}
public double YVal
{
get { return _YVal; }
private set
{
if (_yVal == value) return;
_yVal = value;
OnPropertyChanged("YVal");
}
}
// Constructor, etc...
}
您需要将 Axes
添加到您的 Plot
并且您可能还缺少 PointAnnotation
中的一些参数。看看:
<oxy:Plot>
<oxy:Plot.Axes>
<oxy:LinearAxis Position="Bottom" Minimum="0" Maximum="100"></oxy:LinearAxis>
<oxy:LinearAxis Position="Left" Minimum="0" Maximum="100"></oxy:LinearAxis>
</oxy:Plot.Axes>
<oxy:Plot.Annotations>
<oxy:PointAnnotation X="{Binding Path=XVal, Mode=OneWay}" Y="{Binding Path=YVal, Mode=OneWay}"
Shape="Star"
StrokeThickness="3"
Stroke="Black"
Size="14"
Fill="Black"
Text="My Point Annotation"
Visibility="Visible"/>
</oxy:Plot.Annotations>
</oxy:Plot>
我目前正在尝试向 OxyPlot 图表添加一个点。我想使用 PointAnnotation class(因为它是一个基于 X 和 Y 值的单点,应该绑定到模型中的实际值)。问题是我通过 PointAnnotation 创建的点实际上根本没有显示出来。我看过 OxyPlot 文档,我认为我做对了。我还查看了其他一些问题(this and this 似乎最相关),但其中 none 适用,因为我试图添加一个点并将 X 和 Y 坐标绑定到值在模型中。我想要的只是一个标记特定点的漂亮符号,我希望能够在 XAML 中完成它,以便使用绑定进行自动更新。这不可能吗?
我正在尝试这个,在 XAML 中(这是较大代码的片段,我只包含了相关部分):
<UserControl x:Class="MyNamespace:MyControl"
xmlns:oxy="http://oxyplot.org/wpf"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<oxy:Plot>
<oxy:Plot.Annotations>
<oxy:PointAnnotation X="{Binding Path=XVal, Mode=OneWay}" Y="{Binding Path=YVal, Mode=OneWay}" Shape="Star" Stroke="Black" Fill="Black" Visibility="Visible"/>
</oxy:Plot.Annotations>
</oxy:Plot>
</UserControl>
在代码隐藏中:
public partial class MyControl : UserControl
{
public MyControl()
{
Model = new MyModel();
DataContext = Model;
InitializeComponent();
}
// Other stuff...
}
并且在模型中(同样,只有相关部分):
public class MyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private double _xVal, _yVal;
public double XVal
{
get { return _xVal; }
private set
{
if (_xVal == value) return;
_xVal = value;
OnPropertyChanged("XVal");
}
}
public double YVal
{
get { return _YVal; }
private set
{
if (_yVal == value) return;
_yVal = value;
OnPropertyChanged("YVal");
}
}
// Constructor, etc...
}
您需要将 Axes
添加到您的 Plot
并且您可能还缺少 PointAnnotation
中的一些参数。看看:
<oxy:Plot>
<oxy:Plot.Axes>
<oxy:LinearAxis Position="Bottom" Minimum="0" Maximum="100"></oxy:LinearAxis>
<oxy:LinearAxis Position="Left" Minimum="0" Maximum="100"></oxy:LinearAxis>
</oxy:Plot.Axes>
<oxy:Plot.Annotations>
<oxy:PointAnnotation X="{Binding Path=XVal, Mode=OneWay}" Y="{Binding Path=YVal, Mode=OneWay}"
Shape="Star"
StrokeThickness="3"
Stroke="Black"
Size="14"
Fill="Black"
Text="My Point Annotation"
Visibility="Visible"/>
</oxy:Plot.Annotations>
</oxy:Plot>