Syncfusion SfCartesianChart (набор инструментов MAUI): метки осей колеблются на 1–2 пикселя во время частых обновлений, C#

Место общения программистов C#
Ответить
Anonymous
 Syncfusion SfCartesianChart (набор инструментов MAUI): метки осей колеблются на 1–2 пикселя во время частых обновлений,

Сообщение Anonymous »

Я обновляю Syncfusion.Maui.Toolkit SfCartesianChartColumnSeries) каждую секунду. Проблема, с которой я столкнулся, заключается в том, что метки по оси слегка перемещаются вверх и вниз (1–2 пикселя) при каждом обновлении.
Я уже исправил диапазон оси Y, установив Минимум, Максимум и Интервал, и в ходе отладки я подтвердил, что область графика (SeriesBounds) вообще не меняет размер — ее ширина и высота остаются постоянными при каждом обновлении. обновление. Таким образом, перемещение не вызвано изменениями макета.
Однако всякий раз, когда значения столбцов обновляются, метки по оси Y по-прежнему кажутся смещающимися по вертикали, хотя диапазон оси фиксирован. Похоже, что слой метки перерисовывается при каждом тике, вызывая небольшое визуальное «дрожание» текста оси. Я тестирую это на компьютере с Windows.
Кто-нибудь сталкивался с этим при использовании диаграмм Syncfusion MAUI Toolkit или нашел надежный способ обеспечить идеальную стабильность меток осей во время частых обновлений?


















using SampleApp.Core.ViewModels;

namespace SampleApp.Core.Views;

public partial class LiveChartPage : ContentPage
{
private readonly LiveChartViewModel _vm;

public LiveChartPage()
{
InitializeComponent();
_vm = new LiveChartViewModel();
BindingContext = _vm;
}

protected override void OnAppearing()
{
base.OnAppearing();
_vm.Start(); // Begin 1-second updates
}

protected override void OnDisappearing()
{
_vm.Stop(); // Stop updates when page goes out
base.OnDisappearing();
}
}

public class LiveChartViewModel
{
private readonly IDispatcherTimer _timer;
private int _second = 0;
private readonly Random _rand = new();

public ObservableCollection Points { get; } = new();

public LiveChartViewModel()
{
// Pre-seed if you want (optional)
// Points.Add(new SamplePoint(0, 0));

_timer = Application.Current!.Dispatcher.CreateTimer();
_timer.Interval = TimeSpan.FromSeconds(1);
_timer.Tick += (s, e) => AddNextPoint();
}

private void AddNextPoint()
{
_second++;

// Generate a value between 0 and 1000 (inclusive)
var value = _rand.Next(0, 1001);

Points.Add(new SamplePoint(_second, value));

// (Optional) Keep the last N seconds visible by trimming
// if (Points.Count > 60)
// Points.RemoveAt(0);
}

public void Start() => _timer.Start();
public void Stop() => _timer.Stop();
public void Reset()
{
Stop();
Points.Clear();
_second = 0;
}
}

public record SamplePoint(double Second, double Value);


Подробнее здесь: https://stackoverflow.com/questions/798 ... during-fre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»