【问题标题】:Xamarin Forms ProgressBar Height is not controllableXamarin Forms ProgressBar 高度不可控
【发布时间】:2023-03-20 21:50:02
【问题描述】:

我们已从 Xamarin Forms 2.5 升级到 3.4。 Android 上的 ProgressBar 变得更粗,并且无法由 XAML 的 HeightRequest 控制,而之前是这样。

它在网格布局内。

任何想法如何控制高度?

【问题讨论】:

    标签: xamarin xamarin.forms android-progressbar


    【解决方案1】:

    您可以通过在 xamarin 中使用 Render 来修改进度条的高度。

    CustomProgressBarRenderer.cs

    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.Android;
    
    [assembly: ExportRenderer(typeof(App69.CustomProgressBar), typeof(App69.Droid.CustomProgressBarRenderer))]
    namespace App69.Droid
    {
        public class CustomProgressBarRenderer : ProgressBarRenderer
        {
            public CustomProgressBarRenderer(Context context) : base(context) { }
            protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
            {
                base.OnElementChanged(e);
                if (Control != null)
                {
                    Control.ScaleY = 10; //Changes the height
                }
            }
        }
    }
    

    MainPage.xaml

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:local="clr-namespace:App69"
                 x:Class="App69.MainPage">
    
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Label Text="Top Left" Grid.Row="0" Grid.Column="0" />
            <Label Text="Top Right" Grid.Row="0" Grid.Column="1" />
            <Label Text="Bottom Left" Grid.Row="0" Grid.Column="1" />
            <local:CustomProgressBar Progress="0.5"  Grid.Row="1" Grid.Column="1" />
        </Grid>
    
    </ContentPage>
    

    【讨论】:

      【解决方案2】:
       class CustomProgressBarRenderer : ProgressBarRenderer
          {
              /// <summary>
              /// Raises the <see cref="E:ElementChanged" /> event.
              /// </summary>
              /// <param name="e">The <see cref="ElementChangedEventArgs{Xamarin.Forms.ProgressBar}"/> instance containing the event data.</param>
              protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ProgressBar> e)
              {
                  base.OnElementChanged(e);
                  var element = Element as CustomProgressBar;
                  Control.IndeterminateDrawable.SetColorFilter(element.BarColor.ToAndroid(), PorterDuff.Mode.SrcIn);
                  Control.ProgressDrawable.SetColorFilter(element.BarColor.ToAndroid(), PorterDuff.Mode.SrcIn);
                  Control.ScaleY = element.BarHeight;
              }
      
              /// <summary>
              /// Called when [element property changed].
              /// </summary>
              /// <param name="sender">The sender.</param>
              /// <param name="e">The <see cref="PropertyChangedEventArgs"/> instance containing the event data.</param>
              protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
              {
                  base.OnElementPropertyChanged(sender, e);
                  var element = Element as CustomProgressBar;
                  Control.IndeterminateDrawable.SetColorFilter(element.BarColor.ToAndroid(), PorterDuff.Mode.SrcIn);
                  Control.ProgressDrawable.SetColorFilter(element.BarColor.ToAndroid(), PorterDuff.Mode.SrcIn);
                  Control.ScaleY = element.BarHeight;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2019-04-22
        • 2016-02-13
        • 2020-10-18
        • 2019-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        相关资源
        最近更新 更多