Chr*_*ris 11 c# wpf charts xaml data-visualization
目前我有一个日期时间轴,其中日期与点一致,无论如何都要让这个日期出现在中心,例如条形图上.
<Style x:Key="DateTimeAxisLabelStyle2" TargetType="chartingToolkit:DateTimeAxisLabel">
<Setter Property="DaysIntervalStringFormat" Value="{}{0:dd-MMM}" />
<Setter Property="HoursIntervalStringFormat" Value="{}{0:hh:mm tt}" />
<!--<Setter Property="RenderTransformOrigin" Value="1,0.5" />
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="-45" />
</Setter.Value>
</Setter>-->
<!--<Setter Property="Margin" Value="30,0,-10,0" />-->
</Style>
<chartingToolkit:DateTimeAxis IntervalType="Days"
Interval="1"
Minimum="{Binding StartDate}"
Maximum="{Binding EndDate}"
Orientation="X"
VerticalContentAlignment="Center"
Title="Day"
AxisLabelStyle="{StaticResource DateTimeAxisLabelStyle2}" />
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
以下是我使用WPF Toolkit Source所做的操作以供参考。
我创建了一个派生自 DateTimeAxis 的自定义类,然后覆盖“GetPlotAreaCooperative”方法。DateTimeAxis.Render() 使用相同的“DateTime”值列表调用该方法三次,一次用于 MajorTickmarks,一次用于 MinorTickmarks,一次用于日期标签。列表中没有小标记,因此该方法实际上只被调用两次。我只是保留已评估值的列表,并假设如果它在列表中,则它已经完成了刻度线,并且现在正在执行标签。
class CustomDateTimeAxis : DateTimeAxis
{
List<object> _valueList = new List<object>();
UnitValue prevBaseValue;
protected override UnitValue GetPlotAreaCoordinate(object value, Range<IComparable> currentRange, double length)
{
_valueList.Add(value);
UnitValue baseValue = base.GetPlotAreaCoordinate(value, currentRange, length);
int valueCount = _valueList.Count((x) => x.Equals(value));
if (valueCount == 2)
return new UnitValue(baseValue.Value + 27, baseValue.Unit);
prevBaseValue = baseValue;
return baseValue;
}
protected override void Render(Size availableSize)
{
base.Render(availableSize);
_valueList.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
“27”只是我尝试过的一个数字。您可能想尝试一下,看看什么最适合您。
return new UnitValue(baseValue.Value + 27, baseValue.Unit);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |