Come creare un’area di trama quadrata con Oxyplot

Sto cercando di creare un grafico quadrato (la larghezza dell’asse X è uguale all’altezza dell’asse Y).

Non riesco a trovare alcuna documentazione su questo e tutte le proprietà che ho visto che potrebbero essere in grado di farlo sono inaccessibili.

Ho provato:

 

Questo ovviamente non funziona perché questo imposta l’intera area (non la parte specifica del grafico).

Ho risolto questo problema agganciando l’evento LayoutUpdated su PlotView e aggiornando PlotView.Width dalla PlotArea larghezza / altezza PlotArea .

XAML:

      

Codice dietro:

 public partial class MainWindow { public MainWindow() { InitializeComponent(); DataContext = new MainViewModel(); } public override void OnApplyTemplate() { base.OnApplyTemplate(); var plotView = (PlotView) this.FindName("PlotView"); plotView.LayoutUpdated += OnLayoutUpdated; } private void OnLayoutUpdated(object sender, EventArgs e) { var plotView = (PlotView) this.FindName("PlotView") ; if (plotView.Model != null) { var widthAdjustment = plotView.Model.PlotArea.Width - plotView.Model.PlotArea.Height; plotView.Width = plotView.ActualWidth - widthAdjustment; } } } 

Supponendo che non si desideri ridimensionarlo, funziona se lo si avvolge in un Border con un’altezza uguale alla Width più l’altezza della sezione del titolo. Per esempio:

XAML:

        

Code-behind per l’object Model:

 using OxyPlot; using OxyPlot.Series; using System.Windows; ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public PlotModel Model { get; set; } public MainWindow() { DataContext = this; Model = new PlotModel { Title = "Test", TitlePadding = 0, TitleFontSize = 24 }; LineSeries line = new LineSeries(); line.Points.Add(new DataPoint(0, 0)); line.Points.Add(new DataPoint(1, 1)); line.Points.Add(new DataPoint(2, 2)); Model.Series.Add(line); } } 

E questo è quello che sembra: la finestra

Se si desidera eseguire una versione ridimensionabile, utilizzare l’evento SizeChanged della finestra contenente e regolare nuovamente la dimensione del contenitore Border in tale gestore eventi.

Che ne dici di utilizzare un elemento esterno per definire la larghezza e l’altezza dell’area di disegno, come Grid o Border