在XAML中为WPF OxyPlot PlotViews设置样式

设置OxyPlot绘图视图时,可以通过各种控件显式定义绘图,也可以通过绑定到PlotModel

因此,在第一种情况下,两个LineSeries对象的绘图的XAML可能看起来像

           

具有非常薄的视图模型。 另一方面,在第二种情况下,我只会有类似的东西

  

并在视图模型中构建实际的图。 两种设置都有利有弊,但我发现第一种方法通常在我事先知道我想要绘制的内容时效果更好,而第二种方法允许对绘图内容进行动态更改。

我的问题如下:对于第一种情况,我知道如何为所有图添加一般样式。 例如,如果我希望它们让它们看起来像Seaborn,我会添加类似的东西

  #4c72b0 #55a868 #c44e52 #8172b2 #ccb974 #64b5cd                      

到我的ResourceDictionary 。 如何在第二种情况下实现相同的效果,即使用oxy:PlotView ? 我可以使用设置一些常规样式属性,但是如何设置PlotView ModelSeries包含的所有LineSeries

我没有完成所有评论,但其中一些似乎已经包含解决方案的链接。 我有一个例子,我正在使用MVVM方法并更改这些设置。 它应该有所帮助:

在MainWindow.xaml中:

  

在我的MainWindowViewModel.cs中:

 private PlotModel m_plotModel; public PlotModel plotModel { get { return m_plotModel; } set => SetAndRaisePropertyChanged(ref m_plotModel, value); } public UserControlOscilloViewModel() { var signalAxis = new CategoryAxis() { Position = AxisPosition.Left, Minimum = 0, MinimumMinorStep = 1, AbsoluteMinimum = 0, TicklineColor = OxyColors.Transparent, }; var timeAxis = new LinearAxis() { Position = AxisPosition.Bottom, Minimum = 0, MinimumMajorStep = 1, AbsoluteMinimum = 0, }; plotModel = new PlotModel(); plotModel.Axes.Add(signalAxis); plotModel.Axes.Add(timeAxis); } 

然后,当您刷新模型时,如果需要,您可以像这样访问您的轴:

 CategoryAxis signalAxis = (CategoryAxis)plotModel.Axes.ElementAt(0); LinearAxis timeAxis = (LinearAxis)plotModel.Axes.ElementAt(1); 

并添加如下系列:

 var series = new LineSeries { Color = OxyColors.SeaShell, LineStyle = LineStyle.Dash }; foreach (DataPoint p in ListOfPoints) { series.Points.Add(p); } plotModel.Series.Add(series); plotModel.InvalidatePlot(true); 

我并没有准确地解决你的问题,但我认为你可以通过这样做来访问所有需要的对象/成员。 我还简化了我的代码以提高清晰度,我希望在这样做时我没有破坏任何东西……