Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP径向进度条图像填充_C#_Xaml_Uwp_Windows 10 Universal - Fatal编程技术网

C# UWP径向进度条图像填充

C# UWP径向进度条图像填充,c#,xaml,uwp,windows-10-universal,C#,Xaml,Uwp,Windows 10 Universal,我正在使用UWP工具包中的径向进度条。我想在我创建的游戏中使用这个进度。我有一个图像,我想用它填充进度条的前景。无论我尝试什么,我都无法让图像以进度条填充的方式填充进度条 我目前正在尝试缩放前景中的图像,但这并不是我想要的效果 XAML: 以下是上述代码产生的效果: 有没有办法用图像填充进度条 使用Win2d定制一个怎么样 XAML: 在它背后: private static Vector2 _centerPoint = new Vector2(250); private

我正在使用UWP工具包中的径向进度条。我想在我创建的游戏中使用这个进度。我有一个图像,我想用它填充进度条的前景。无论我尝试什么,我都无法让图像以进度条填充的方式填充进度条

我目前正在尝试缩放前景中的图像,但这并不是我想要的效果

XAML:

以下是上述代码产生的效果:

有没有办法用图像填充进度条


使用Win2d定制一个怎么样

XAML:


在它背后:

    private static Vector2 _centerPoint = new Vector2(250);
    private static float _radius = 200;
    private int _currentValue;
    private readonly List<Vector2> _points = new List<Vector2>();
    private readonly CanvasStrokeStyle _strokeStyle = new CanvasStrokeStyle
    {
        StartCap = CanvasCapStyle.Round,
        EndCap = CanvasCapStyle.Round
    };

    public MainPage()
    {
        InitializeComponent();
        GetPoints(100);
    }

    private void GetPoints(int i)
    {
        var radFactor = Math.PI / 180;
        var angleStep = 360f / i;

        for (int j = 0; j < i + 1; j++)
        {
            _points.Add(new Vector2(_centerPoint.X + _radius * (float)Math.Cos((angleStep * j + 90) * radFactor), 
                _centerPoint.Y + _radius * (float)Math.Sin((angleStep * j + 90) * radFactor)));
        }
    }

    private void CanvasControl_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
    {
        for (int i = 0; i < _currentValue; i++)
        {
            args.DrawingSession.DrawLine(_points[i], _points[i + 1], Colors.LimeGreen, 24, _strokeStyle);
        }
    }

    private void RangeBase_OnValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        _currentValue = (int) e.NewValue;
        CanvasControl.Invalidate();
    }
private static Vector2\u centerPoint=new Vector2(250);
专用静态浮点数_半径=200;
私有int_currentValue;
私有只读列表_points=new List();
私有只读画布样式_strokeStyle=新画布样式
{
StartCap=画布样式。圆形,
EndCap=画布样式。圆形
};
公共主页()
{
初始化组件();
得分(100分);
}
私有无效获取点(int i)
{
var radFactor=Math.PI/180;
var angleStep=360f/i;
对于(int j=0;j
它应该是这样的:


我决定不再使用径向进度条。我已经学会了图像剪辑。我使用图像剪辑和旋转变换来获得所需的效果

XAML:

private int _value;
        public int Value
        {
            get => _value;
            set
            {
                if (_value != value)
                {
                    _value = value;
                    RaisePropertyChanged(nameof(Value));
                    Scale = 1.0-(100.0 - (316.0 * (Convert.ToDouble(value) / 100.0) / 316.0 * 100.0))/100.0;

                }
            }
        }

        private double _scale;
        public double Scale
        {
            get => _scale;
            set
            {
                if (_scale != value)
                {
                    _scale = value;
                    RaisePropertyChanged(nameof(Scale));
                }
            }
        }
<Grid Width="500" Height="500">
    <xaml:CanvasControl x:Name="CanvasControl" Draw="CanvasControl_OnDraw"/>

    <Slider Width="500" VerticalAlignment="Center" ValueChanged="RangeBase_OnValueChanged"/>
</Grid>
    private static Vector2 _centerPoint = new Vector2(250);
    private static float _radius = 200;
    private int _currentValue;
    private readonly List<Vector2> _points = new List<Vector2>();
    private readonly CanvasStrokeStyle _strokeStyle = new CanvasStrokeStyle
    {
        StartCap = CanvasCapStyle.Round,
        EndCap = CanvasCapStyle.Round
    };

    public MainPage()
    {
        InitializeComponent();
        GetPoints(100);
    }

    private void GetPoints(int i)
    {
        var radFactor = Math.PI / 180;
        var angleStep = 360f / i;

        for (int j = 0; j < i + 1; j++)
        {
            _points.Add(new Vector2(_centerPoint.X + _radius * (float)Math.Cos((angleStep * j + 90) * radFactor), 
                _centerPoint.Y + _radius * (float)Math.Sin((angleStep * j + 90) * radFactor)));
        }
    }

    private void CanvasControl_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
    {
        for (int i = 0; i < _currentValue; i++)
        {
            args.DrawingSession.DrawLine(_points[i], _points[i + 1], Colors.LimeGreen, 24, _strokeStyle);
        }
    }

    private void RangeBase_OnValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        _currentValue = (int) e.NewValue;
        CanvasControl.Invalidate();
    }
 <Image Source="ms-appx:///Assets/Progress.png" Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" >
                <Image.Clip>
                    <RectangleGeometry Rect="{Binding Rect}" >
                        <RectangleGeometry.Transform>
                            <RotateTransform CenterX="{Binding CenterXY}" CenterY="{Binding CenterXY}" Angle="{Binding Angle}" />
                        </RectangleGeometry.Transform>
                    </RectangleGeometry>
                </Image.Clip>
            </Image>
private int _value;
        public int Value
        {
            get => _value;
            set
            {
                if (_value != value)
                {
                    _value = value;
                    RaisePropertyChanged(nameof(Value));
                    Angle = 144 - 1.44 * value;
                }
            }
        }