如何在Silverlight Toolkit的系列中显示DateTimeAxis或LinearAxis的最小值和最大值

时间:2011-07-15 15:53:10

标签: silverlight charts silverlight-toolkit series

我希望这是一个简单的问题,尽管我还没有在网上找到答案。

我正在使用Silverlight Toolkit系列的2010年4月发行版,我需要在DateTimeAxis或LinearAxis中仅显示最小值和最大值(我指定的值)。通过“显示”,我的意思是在轴的两端显示实际的“刻度”加上它的相关值。

这有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,你可以。设置“最小值”和“最大值”,并将“间隔”设置为“最小值”和“最大值”之间的差值。

即:

<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:AxisFormatter x:Key =“AxisFormatter” 到你的资源词典。

然后在你的轴的实际XAML声明中,把它放在下面;

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

很抱歉,此解决方案有点复杂,如果您需要进一步的指导,请与我们联系。

答案 1 :(得分:1)

刚刚在我的博客上回复了您的问题:http://geoffwebbercross.blogspot.com/2011/02/silverlight-4-toolkit-zoom-and-pan.html?showComment=1311446800567#c5905503102900111342

“嗨Victor,我不认为你可以通过内置轴实现这一点,因为它不是为此而设计的。但是你可以通过在图表上设置x轴来做到这一点,就像我在这个例子中做的那样,然后通过在图表外部的两端放置两个文本块来创建自己的伪轴;可能需要一些时间来使格式正确,但肯定会工作,因为它是一个简单的解决方法。您可以使用LINQ获取最小值加载数据时的最大值和最大值并绑定到这些值。“

获取包含样式输出轴示例的代码:

http://slchartzoomandpan.codeplex.com/