添加 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>