我们打开DynamicDataDisplay的源码.内部自带有samples其中v2中带有一个名叫TooltipSample的例子.

如图...坐标尺默认计算的是横坐标的值.若我们的横坐标是以日期计算呢?则我们看源码

我们找到一个名为CursorCoordinateGraph的xaml文件.它负责渲染横纵坐标的值
if (xTextMapping != null)
text = xTextMapping(xValue);
// doesnot have xTextMapping or it returned null
if (text == null)
text = GetRoundedValue(visible.Left, visible.Right, xValue);
if (!String.IsNullOrEmpty(customXFormat))
text = String.Format(customXFormat, text);
horizTextBlock.Text = text;
目前我并没有找到那个类可以帮助显示横坐标为日期的值...若存在,请各位大神知点一下小弟
我目前的解决方案是修改源码.
我们在上述类中添加一个
private HorizontalDateTimeAxis dateAxis = new HorizontalDateTimeAxis();
/// <summary>
/// 水平方向是否显示日期
/// </summary>
private bool isHorizontalDateTimeAxis = false;
/// <summary>
/// 水平方向是否显示日期
/// 修改人:pigwing
/// 修改日期:2010-11-19 9:57
/// </summary>
public bool IsHorizontalDateTimeAxis
{
get { return isHorizontalDateTimeAxis; }
set { isHorizontalDateTimeAxis = value; }
}
private void UpdateUIRepresentation()
{
UpdateUIRepresentation(Mouse.GetPosition(this));
}
/// <summary>
/// 更新水平方向显示值
/// </summary>
/// <param name="mousePos"></param>
private void UpdateUIRepresentation(Point mousePos)
{
if (Plotter2D == null) return;
var transform = Plotter2D.Viewport.Transform;
Rect visible = Plotter2D.Viewport.Visible;
Rect output = Plotter2D.Viewport.Output;
if (!output.Contains(mousePos)) return;
horizLine.X1 = output.Left;
horizLine.X2 = output.Right;
horizLine.Y1 = mousePos.Y;
horizLine.Y2 = mousePos.Y;
vertLine.X1 = mousePos.X;
vertLine.X2 = mousePos.X;
vertLine.Y1 = output.Top;
vertLine.Y2 = output.Bottom;
if (UseDashOffset)
{
horizLine.StrokeDashOffset = (output.Right - mousePos.X) / 2;
vertLine.StrokeDashOffset = (output.Bottom - mousePos.Y) / 2;
}
Point mousePosInData = mousePos.ScreenToData(transform);
string text = null;
if (showVerticalLine)
{
double xValue = mousePosInData.X;
if (!isHorizontalDateTimeAxis)
{
if (xTextMapping != null)
text = xTextMapping(xValue);
// doesnot have xTextMapping or it returned null
if (text == null)
text = GetRoundedValue(visible.Left, visible.Right, xValue);
if (!String.IsNullOrEmpty(customXFormat))
text = String.Format(customXFormat, text);
}
else
{
text = dateAxis.ConvertFromDouble(xValue).ToString();
}
horizTextBlock.Text = text;
}
double width = horizGrid.ActualWidth;
double x = mousePos.X + blockShift.X;
if (x + width > output.Right)
{
x = mousePos.X - blockShift.X - width;
}
Canvas.SetLeft(horizGrid, x);
if (showHorizontalLine)
{
double yValue = mousePosInData.Y;
text = null;
if (yTextMapping != null)
text = yTextMapping(yValue);
if (text == null)
text = GetRoundedValue(visible.Bottom, visible.Top, yValue);
if (!String.IsNullOrEmpty(customYFormat))
text = String.Format(customYFormat, text);
vertTextBlock.Text = text;
}
// by default vertGrid is positioned on the top of line.
double height = vertGrid.ActualHeight;
double y = mousePos.Y - blockShift.Y - height;
if (y < output.Top)
{
y = mousePos.Y + blockShift.Y;
}
Canvas.SetTop(vertGrid, y);
Position = mousePos;
}
cursorCoordinateGraph.IsHorizontalDateTimeAxis = true;

日期便可以在下面正常显示了.
浙公网安备 33010602011771号