WPFDevelopers icon indicating copy to clipboard operation
WPFDevelopers copied to clipboard

ColorPicker 的 Width 与 Height 设置 NaN 后,Thumb 位置发生错误

Open yanjinhuagood opened this issue 10 months ago • 1 comments

按下面方式使用后 Thumb 移动位置错误。

<wd:ColorPicker Width="NaN" Height="NaN"/>

感谢 Coolkeke 大佬反馈。

yanjinhuagood avatar Mar 14 '25 15:03 yanjinhuagood

在目标控件初始化时_thumb的位置是准确的,但是在色盘在进行大小缩放的时候_thumb其实位置是出现问题的,重要的一点是缩放_thumb的位置没进行刷新,需要在OnRender的时候进行重新刷新_thumb即可

    private void UpdateThumbPosition()
    {
        if (_canvas == null || _thumb == null) return;
        var color = SelectedColor;
        double h = 0, s = 0, b = 0;
        ColorUtil.HsbFromColor(color, ref h, ref s, ref b);
        Canvas.SetLeft(_thumb, s * _canvas.ActualWidth - _thumb.ActualWidth / 2);
        Canvas.SetTop(_thumb, (1 - b) * _canvas.ActualHeight - _thumb.ActualHeight / 2);
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);
        UpdateThumbPosition();
    }

Coolkeke avatar Mar 16 '25 06:03 Coolkeke