Не удается очистить оси набора инструментов Silverlight Charting по коду - PullRequest
2 голосов
/ 06 августа 2011

Я пытаюсь получить диаграмму Silverlight (Windows Phone 7), которую пользователь может изменить, изменив некоторые настройки.

После очистки осей диаграмм и чтения новых осей я получаю двойные осисообщается chart.ActualAxes.Count

Кто-нибудь знает, как полностью очистить и удалить все оси на графике Silverlight и добавить новые?Должен ли я вызывать что-то, чтобы обновить список ActualAxes после добавления?

заранее спасибо

пример кода (вызовите это дважды, и ваша диаграмма получит 4 осивместо двух):

chart.Axes.Clear();

chart.Axes.Add(new LinearAxis()
{
    Orientation = AxisOrientation.Y,
    Location = AxisLocation.Left,
    Minimum = 0
});
chart.Axes.Add(new DateTimeAxis()
{
    Orientation = AxisOrientation.X,
    Location = AxisLocation.Bottom,
    IntervalType = DateTimeIntervalType.Days
});

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Коллекция Chart Axes представляет постоянные оси в диаграмме, которые будут отображаться, даже если в диаграмме нет рядов.ActualAxes представляет комбинацию как постоянных осей, так и тех, которые используются сериями на диаграмме.

Когда вы очистите коллекцию и протестируете ActualAxes.Count, вы обнаружите, что она по-прежнему говорит 2, хотя Axes теперь равно 0. ActualAxes (экземпляр SeriesHostAxesCollection) не позволит удалить ось, которая используется в качестве существующей серии.Следовательно, коллекция ActualAxes держится за оригиналы.Затем вы добавляете 2 других в постоянную коллекцию Axes, так что эти 2 новых также добавляются в ActualAxes, в результате вы получаете 4.

Запустите свой код еще раз (в третий раз) и выдолжно увидеть, что число ActualAxes осталось 4. Это потому, что 2 оси, которые вы добавили во втором вызове, не используются никакими сериями, поэтому их можно удалить из коллекции ActualAxes.

1 голос
/ 11 сентября 2013

Следующий код должен работать

var xAxis = chart_name.ActualAxes.OfType<LinearAxis>().FirstOrDefault(ax => ax.Orientation == AxisOrientation.X);
if (xAxis != null) 
{
   xAxis.Title = "The Title";
}
...