C# 如何用圆标记椭圆点标记器

C# 如何用圆标记椭圆点标记器,c#,wpf,xaml,scichart,C#,Wpf,Xaml,Scichart,当鼠标在标记上单击鼠标中键时,我试图高亮显示椭圆点标记。我想在使用点标记选择图表修改器(PointMarkerSelectionModifier)缩放或平移图形时重新绘制标记。 当图形被缩放或平移时,我如何转换点,或者有更好的方法来实现这一点 公共类PointMarkerSelectionModifier:ChartModifierBase { 专用点?选择点; 专用点(最后一个鼠标点);; public static readonly dependencProperty LineBrus

当鼠标在标记上单击鼠标中键时,我试图高亮显示椭圆点标记。我想在使用点标记选择图表修改器(PointMarkerSelectionModifier)缩放或平移图形时重新绘制标记。 当图形被缩放或平移时,我如何转换点,或者有更好的方法来实现这一点



公共类PointMarkerSelectionModifier:ChartModifierBase
{
专用点?选择点;
专用点(最后一个鼠标点);;
public static readonly dependencProperty LineBrushProperty=dependencProperty.Register(“LineBrush”、typeof(Brush)、typeof(PointMarkerSelectionModifier)、new PropertyMetadata(new SolidColorBrush(Colors.LimeGreen)、OnLineBrushChanged));
public static readonly dependencProperty TextForegroundProperty=dependencProperty.Register(“文本前景”、typeof(画笔)、typeof(指针标记选择修改器)、new PropertyMetadata(new SolidColorBrush(Colors.White));
公共画笔文本前景
{
获取{return(Brush)GetValue(TextForegroundProperty);}
set{SetValue(TextForegroundProperty,value);}
}
公共刷线刷
{
获取{return(Brush)GetValue(LineBrushProperty);}
set{SetValue(LineBrushProperty,value);}
}
ParentSurfaceRendered上的公共覆盖无效(SCIChartRendered消息e)
{
基于父表面顺序(e);
}
修改器mousedown(ModifierMouseArgs e)上的公共覆盖无效
{
基。在修改器mousedown(e)上;
var allSeries=this.ParentSurface.RenderableSeries;
//将鼠标点转换为图表区域,例如,当您有左轴时
selectedPoint=GetPointRelativeTo(例如,MousePoint,this.ModifierSurface);
ClearModifierSurface();
//将翻转点添加到曲面
var hitTestResults=allSeries.Select(x=>x.HitTest(selectedPoint.Value)).ToArray();
foreach(hitTestResults中的var hitTestResult)
{
常量int markerSize=10;
//每个HitTestResult创建一个椭圆,并将其放置在画布上
var椭圆=新椭圆()
{
宽度=标记大小,
高度=标记大小,
笔划=画笔。红色,
冲程厚度=2,
IsHitTestVisible=false,
标记=类型(点标记选择修改器)
};
SetLeft(椭圆,hitTestResult.HitTestPoint.X-markerSize*0.5);
SetTop(椭圆,hitTestResult.HitTestPoint.Y-markerSize*0.5);
this.ModifierSurface.Children.Add(椭圆);
}
}
ModifierMouseMove上的公共覆盖无效(ModifierMouseArgs e)
{
//TODO:缩放或平移图形时如何平移选定点
}
私有void ClearModifierSurface()
{
对于(int i=ParentSurface.ModifierSurface.Children.Count-1;i>=0;--i)
{
if(((FrameworkElement)ParentSurface.ModifierSurface.Children[i]).Tag==typeof(PointMarkerSelectionModifier))
{
ParentSurface.ModifierSurface.Children.RemoveAt(i);
}
}
}
}
披露:我是团队的首席开发人员

你好

您需要做的是在覆盖OnParentSurfaceRefered时,重新定位标记

我们对SciChart中的所有核心修改器所做的是在MouseDown、MouseMove事件(如记录最近的鼠标移动)中设置一些条件,然后在OnParentSurfaceReferred中重新定位标记或覆盖

这允许我们更新UI,如工具提示和标记。如果基础图形发生更改(例如,数据更改、图形大小调整、缩放或平移),则我们将重新运行命中测试或将放置的点重新转换到新位置

一些有用的API/文章

  • 反之亦然
  • 我们的系列节目
  • 关于
  • 关于

希望这有帮助

花点时间阅读帮助中心中的。堆栈溢出上的格式设置与其他站点不同。你的文章看起来越好,用户就越容易帮助你(就像你不需要在每一行代码之间都有一个空行)。