我希望这是一个简单的问题,尽管我还没有在网上找到答案。
我正在使用Silverlight Toolkit系列的2010年4月发行版,我需要在DateTimeAxis或LinearAxis中仅显示最小值和最大值(我指定的值)。通过“显示”,我的意思是在轴的两端显示实际的“刻度”加上它的相关值。
这有可能吗?
谢谢!
答案 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获取最小值加载数据时的最大值和最大值并绑定到这些值。“
获取包含样式输出轴示例的代码: