Lib*_* TK 9 c# ios xamarin xamarin.forms
我曾经Drawable根据这个问题回答了自定义ProgressBarin 的渲染,但解决方案不适用于iOS.Android
以下是我的代码 iOS CustomRenderer
[assembly: ExportRenderer(typeof(CustomProgressbar), typeof(CustomProgressBarRenderer))]
namespace Demo.iOS.Renderers
{
public class CustomProgressBarRenderer : ProgressBarRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<ProgressBar> e)
{
try
{
base.OnElementChanged(e);
if (Control != null)
{
Control.ProgressTintColor = Color.FromHex("#ff0000").ToUIColor();
Control.TrackTintColor = Color.FromHex("#3489cc").ToUIColor();
}
}
catch (Exception ex)
{
}
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
var X = 1.0f;
var Y = 15.0f;
CGAffineTransform _transform = CGAffineTransform.MakeScale(X, Y);
this.Transform = _transform;
this.ClipsToBounds = true;
this.Layer.MasksToBounds = true;
this.Layer.CornerRadius = 5;
}
}
Run Code Online (Sandbox Code Playgroud)
}
我该如何做到这一点?
根据@ SushiHangover的回答,我们可以做出一个ViewRenderer来实现你的效果.
首先,创建我们自己的ProgressView,确保它是继承自的ContentView.还添加一个BindableProperty来呈现值:
public partial class ProgressView : ContentView
{
public double Progress
{
set { SetValue(ProgressProperty, value); }
get { return (double)GetValue(ProgressProperty); }
}
public readonly static BindableProperty ProgressProperty = BindableProperty.Create("Progress", typeof(double), typeof(ProgressView), 0.0);
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我们可以使自定义渲染器像:
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
//You can refer to @SushiHangover's method for detail's code, here I use the same name.
Setup();
Complete = ((ProgressView)Element).Progress;
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "Progress")
{
Complete = ((ProgressView)Element).Progress;
}
}
Run Code Online (Sandbox Code Playgroud)
因为这是在渲染器中,我们应该刷新标签的框架:
public override void Draw(CGRect rect)
{
base.Draw(rect);
...
label.Frame = Bounds;
}
Run Code Online (Sandbox Code Playgroud)
最后我们可以在Form上使用它:
<local:ProgressView x:Name="MyProgress" HeightRequest="50"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |