using System.Windows.Controls;
using LiveChartsCore;
using LiveChartsCore.Kernel;
using LiveChartsCore.Kernel.Sketches;
namespace SharepointToolbox.Views.Tabs;
public partial class StorageView : UserControl
{
public StorageView(ViewModels.Tabs.StorageViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
StoragePieChart.Tooltip = new SingleSliceTooltip();
}
}
///
/// Custom tooltip that only shows the single closest/hovered pie slice
/// instead of LiveCharts2's default which shows multiple nearby slices.
///
internal sealed class SingleSliceTooltip : IChartTooltip
{
private readonly System.Windows.Controls.ToolTip _tip;
public SingleSliceTooltip()
{
_tip = new System.Windows.Controls.ToolTip
{
Padding = new System.Windows.Thickness(8, 4, 8, 4),
FontSize = 13,
BorderThickness = new System.Windows.Thickness(1),
};
_tip.SetResourceReference(System.Windows.Controls.Control.BackgroundProperty, "SurfaceBrush");
_tip.SetResourceReference(System.Windows.Controls.Control.ForegroundProperty, "TextBrush");
_tip.SetResourceReference(System.Windows.Controls.Control.BorderBrushProperty, "BorderSoftBrush");
}
public void Show(IEnumerable foundPoints, Chart chart)
{
// Only show the first (closest) point
var point = foundPoints.FirstOrDefault();
if (point == null) { Hide(chart); return; }
var label = point.Context.Series.GetPrimaryToolTipText(point);
if (string.IsNullOrEmpty(label)) label = point.Context.Series.Name ?? "";
_tip.Content = label;
_tip.IsOpen = true;
}
public void Hide(Chart chart)
{
_tip.IsOpen = false;
}
}