圆形进度条厚度

时间:2018-12-18 16:54:52

标签: c# wpf xaml material-design-in-xaml

使用圆形样式时,是否可以增加进度条的厚度? 我在github上找不到关于它的任何文档。

2 个答案:

答案 0 :(得分:1)

基于罗伯特·哈维(Robert Harvey)的答案,我找到了一个更好的解决方案。我创建了一个更改厚度值的行为,而不是复制整个样式,而是通过另一个硬编码值来更改硬编码值。

 public class CircularProgressBarBehavior : StyleBehavior<ProgressBar, CircularProgressBarBehavior>
{
    public static readonly DependencyProperty StrokeThicknessProperty =
        DependencyProperty.RegisterAttached("StrokeThickness", typeof(double), typeof(CircularProgressBarBehavior), new PropertyMetadata(3d));

    public static double GetStrokeThickness(DependencyObject dependencyObject)
    {
        return (double) dependencyObject.GetValue(StrokeThicknessProperty);
    }

    protected override void OnAttached()
    {
        base.OnAttached(); 

        // ReSharper disable once CompareOfFloatsByEqualityOperator
        var path = AssociatedObject.GetChildren<Path>().FirstOrDefault(e => e.Name.Equals("Path"));

        if (path != null)
            path.StrokeThickness = GetStrokeThickness(AssociatedObject);
    }

    public static void SetStrokeThickness(DependencyObject dependencyObject, double value)
    {
        dependencyObject.SetValue(StrokeThicknessProperty, value);
    }
}

答案 1 :(得分:1)

要解决此问题,而无需在XAML之外做任何事情或修改模板的方法是使用以下组合:

  • 宽度/高度
  • ScaleTransform

在下面的示例中,我通常会尝试缩放和宽度/高度之间的划分,直到对外观感到满意为止。

<ProgressBar Style="{StaticResource MaterialDesignCircularProgressBar}" Width="50" Height="50">
  <ProgressBar.LayoutTransform>
    <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="2" ScaleY="2" />
  </ProgressBar.LayoutTransform>
</ProgressBar>