|
…
public class CustomChartRenderer : SfChartRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<SfChart> e)
{
base.OnElementChanged(e);
if (Control != null && Control is Native.SFChart)
{
SfChart FormsChart = Element as SfChart;
for (int i = 0; i < FormsChart.ChartBehaviors.Count; i++)
{
if (FormsChart.ChartBehaviors[i] is ChartTooltipBehavior)
{
ChartTooltipBehavior formsTooltip = FormsChart.ChartBehaviors[i] as
ChartTooltipBehavior;
TooltipBehaviorExt nativeTooltip = new TooltipBehaviorExt();
nativeTooltip.FormsBehavior = formsTooltip;
var properties = SfChartRenderer.GetPropertiesChanged(typeof(ChartTooltipBehavior),
formsTooltip);
foreach (var name in properties)
{
ChartTooltipBehaviorMapping.OnChartTooltipBehaviorPropertiesChanged(name,
formsTooltip, nativeTooltip);
}
SfChartRenderer.SetNativeObject(typeof(ChartTooltipBehavior), formsTooltip,
nativeTooltip);
Control.Behaviors.RemoveAt(i);
Control.Behaviors.Insert(i, nativeTooltip);
}
}
}
}
}
public class TooltipBehaviorExt : ChartTooltipBehaviorHelper
{
public override void DrawRect(CGRect rect)
{
PropertyInfo propertyInfo = typeof(Native.SFChart).GetProperty("TooltipView",
BindingFlags.NonPublic | BindingFlags.Instance);
UIView value = (UIView)propertyInfo.GetValue(this.Chart, null);
UIView tooltipView = value;
CGRect seriesClipRect = Chart.SeriesClipRect;
nfloat width = value.Frame.Width;
nfloat height = value.Frame.Height;
if (value.Frame.X < 0)
{
tooltipView.Frame = new CGRect(seriesClipRect.Left, seriesClipRect.GetMidY(), width,
height);
}
else if(value.Frame.Y > seriesClipRect.Height)
{
tooltipView.Frame = new CGRect(value.Frame.X, seriesClipRect.GetMidY(), width, height);
}
else if (value.Frame.X > seriesClipRect.GetMidX())
{
tooltipView.Frame = new CGRect(seriesClipRect.Left, seriesClipRect.Top, width, height);
}
propertyInfo.SetValue(Chart, tooltipView);
base.DrawRect(rect);
}
} |
Hi,
Would you have the same fix for off-screen tooltip custom renderer but for Android? I have issues with columnseries tooltip showing off-screen and believe that this should fix issues.
Any help much appreciated,
Best Regards,
Matt
|
<chart:ColumnSeries x:Name="series1" ItemsSource="{Binding Data}"
XBindingPath="XValue" YBindingPath="YValue1"
EnableTooltip="True">
<chart:ColumnSeries.TooltipTemplate>
<DataTemplate>
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal">
<Label Text="{Binding XValue}" LineBreakMode="WordWrap" WidthRequest="100"/>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding YValue}"/>
</StackLayout>
</StackLayout>
</DataTemplate>
</chart:ColumnSeries.TooltipTemplate>
</chart:ColumnSeries> |