如何在Xamarin窗体中更改进度条的高度?

8fsztsew  于 2022-12-07  发布在  其他
关注(0)|答案(6)|浏览(246)

如何在代码中更改Xamarin Forms ProgressBar的高度?我使用的是Xamarin Forms V2.1。
.HeightRequest.MinimumHeightRequest似乎没有任何效果。默认的进度条非常细,甚至可能不会被注意到。
.BackgroundColor似乎也不起作用。
我错过了什么?

pgpifvop

pgpifvop1#

您需要自定义渲染器:
首先为自定义进度栏创建一个类:

public class CustomProgressBar :ProgressBar
{
  public CustomProgressBar()
   {
   }
}

然后为自定义进度条渲染器添加一个新文件:
对于iOS:

public class CustomProgressBarRenderer : ProgressBarRenderer
{
    protected override void OnElementChanged(
     ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
    {
        base.OnElementChanged(e);

        Control.ProgressTintColor = Color.FromRgb(182, 231, 233).ToUIColor();// This changes the color of the progress
    }

    public override void LayoutSubviews()
    {
        base.LayoutSubviews();

        var X = 1.0f;
        var Y = 10.0f; // This changes the height

        CGAffineTransform transform = CGAffineTransform.MakeScale(X, Y);
        Control.Transform = transform;
    }
}

[EDIT:根据备注修复上述代码]
对于安卓系统:

public class CustomProgressBarRenderer :ProgressBarRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
    {
        base.OnElementChanged(e);

        Control.ProgressTintList = Android.Content.Res.ColorStateList.ValueOf(Color.FromRgb(182, 231, 233).ToAndroid()); //Change the color
        Control.ScaleY = 10; //Changes the height

    }
}

我希望这对你有帮助!

mdfafbf1

mdfafbf12#

若要使进度栏更粗,只需更改ProgressBar的ScaleY属性。
例如:此代码

<ProgressBar Progress=".5"/>
<ProgressBar ScaleY="2" Progress=".5"/>
<ProgressBar ScaleY="5" Progress=".5"/>

生成此

请注意,您可能需要相应地调整边距。

s3fp2yjn

s3fp2yjn3#

<ProgressBar
  BackgroundColor="White"
  ProgressColor="#BCC7EF"
  Progress="0.7">
    <ProgressBar.ScaleY>
      <OnPlatform
        x:TypeArguments="x:Double"
        iOS="2"
        Android="1" />
      </ProgressBar.ScaleY>
u91tlkcl

u91tlkcl4#

@BillF基本正确
在iOS渲染器代码中,尝试使用

this.Control.Transform = transform;

代替

this.Transform = transform;
bmvo0sr5

bmvo0sr55#

我也面临着同样的需求,在最新版本的Visual Studio 16.5.2中,我发现要获得更大的水平条,只需在xml中的progressbar声明中设置ScaleY。为了避免Android上的小故障,并确保进度条不会淹没其他元素,我添加了一个边距,正如您在下面的声明中所看到的。

<ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar1"
        android:layout_below="@+id/message"
        android:scaleY="8"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"/>
zvms9eto

zvms9eto6#

对我来说,最简单的解决方案是使用Xamarin.Forms.Visual.Material然后在您的XAML,在进度条设置HeightRequest属性为您想要的,并使用Visual属性作为材料。

相关问题