在你的代码中
Point ControlPos = e.GetPosition (this); Point WindowPos = e.GetPosition( Application.Current.MainWindow );
会给你 - 控制和窗口坐标中的坐标。
_PART_SecondCanvas 和 _PART_FirstCanvas 为null,因为它们属于孩子 的 滑块 强> 的控制模板,而不是“主” 的 HueWheel 强> 模板。因此,你无法与他们联系 GetTemplateChild() 来自HueWheel。
_PART_SecondCanvas
_PART_FirstCanvas
GetTemplateChild()
在 OnApplyTemplate() ,你需要先找到滑块,然后应用它的模板,最后调用 FindName() 上 那 用于查找画布元素的模板:
OnApplyTemplate()
FindName()
public override void OnApplyTemplate() { base.OnApplyTemplate(); //_PART_FirstCanvas = (Canvas)GetTemplateChild("PART_FirstCanvas"); //_PART_SecondCanvas = (Canvas)GetTemplateChild("PART_SecondCanvas"); _PART_Slider = (Slider)GetTemplateChild("PART_Slider"); _PART_Slider.ApplyTemplate(); var sliderTemplate = _PART_Slider.Template; _PART_FirstCanvas = (Canvas)sliderTemplate.FindName("PART_FirstCanvas", _PART_Slider); _PART_SecondCanvas = (Canvas)sliderTemplate.FindName("PART_SecondCanvas", _PART_Slider); }
资源: 我如何获得ContentPresenter的孩子?
一旦你真正找到了 _PART_SecondCanvas 和 _PART_FirstCanvas , 您的 OnMouseMove() 功能应该做你期望的。
OnMouseMove()