Как отобразить минимальное и максимальное значения для DateTimeAxis или LinearAxis в серии линий Silverlight Toolkit - PullRequest
0 голосов
/ 15 июля 2011

Я надеюсь, что это простой вопрос, хотя я еще не смог найти ответ в Интернете.

Я использую выпуск линий серии Silverlight Toolkit за апрель 2010 года, и мне необходимо отображать только минимальные и максимальные значения (которые я указываю) в DateTimeAxis или LinearAxis. Под «отображением» я подразумеваю показ фактического «тика» плюс соответствующее значение на обоих концах оси.

Возможно ли это вообще?

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 июля 2011

Только что ответил на ваш вопрос в моем блоге: http://geoffwebbercross.blogspot.com/2011/02/silverlight-4-toolkit-zoom-and-pan.html?showComment=1311446800567#c5905503102900111342

"Привет, Виктор, я не думаю, что ты мог бы достичь этого с помощью встроенной оси, поскольку она не предназначена для этого. Однако ты мог бы потенциально сделать это, выделив ось x на графике, как я в этом примере Затем создайте свою собственную псевдоось, поместив два текстовых блока под внешнюю по отношению к диаграмме на каждом конце; для правильного форматирования может потребоваться некоторое время, но это определенно сработает, поскольку это простой обходной путь. Для получения минимального значения можно использовать LINQ. и max при загрузке данных и привязке к этим значениям. "

Получите код, который содержит пример оформления осей здесь:

http://slchartzoomandpan.codeplex.com/

1 голос
/ 15 июля 2011

Да, вы можете.Установите минимальное и максимальное значения и установите интервал как разницу между минимальным и максимальным значениями.

, т. Е.

<toolkit:LinearAxis Minimum="0" Orientation="X" Maximum="105" Interval="105"/>

ОБНОВЛЕНИЕ: (для DateTimeAxis)

Этонемного сложнее исправить DateTimeAxis.Вот мое решение через IValueConverter:

 public class AxisFormatter : IValueConverter
  {
    public Object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (DateTime.Parse(value.ToString()) != maxDate && DateTime.Parse(value.ToString() != minDate)
            return null;
        else
            return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

, где minDate и maxDate - ваши жестко заданные значения для верхней и нижней границ вашей оси.

Также вам потребуется реализовать этот конвертерчерез AxisLabelStyle вашей оси.Таким образом, в вашем Styles.xaml или там, где вы храните ваши стили, поместите этот стиль:

<Style x:Key="DateTimeAxisLabelStyle1" TargetType="charting:DateTimeAxisLabel">
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="YearsIntervalStringFormat" Value="{}{0:yyyy}"/>
    <Setter Property="MonthsIntervalStringFormat" Value="{}{0:d}"/>
    <Setter Property="WeeksIntervalStringFormat" Value="{}{0:d}"/>
    <Setter Property="DaysIntervalStringFormat" Value="{}{0:d}"/>
    <Setter Property="HoursIntervalStringFormat" Value="{}{0:t}"/>
    <Setter Property="MinutesIntervalStringFormat" Value="{}{0:t}"/>
    <Setter Property="SecondsIntervalStringFormat" Value="{}{0:T}"/>
    <Setter Property="MillisecondsIntervalStringFormat" Value="{}{0:mm:ss.fff}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="charting:DateTimeAxisLabel">
                <TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource axisFormatter}}"></TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

и добавьте xmlns: local = "clr-namespace: YOURPROJECTNAME в ваш файл XAML, а также добавьте local: AxisFormatterx: Key = "AxisFormatter" в вашем словаре ресурсов.

Затем в фактическом объявлении XAML вашей оси поместите его, как показано ниже;

<toolkit:DateTimeAxis AxisLabelStyle="{StaticResource DateTimeAxisLabelStyle1}"  Orientation="X" />

Извините, что это решение довольно сложное,и дайте мне знать, если вам нужно дальнейшее руководство.

...