按钮的Xamarin自定义渲染器(iOS)

时间:2017-10-03 23:50:14

标签: c# button xamarin.ios xamarin.forms custom-renderer

我已经为iOS声明了一个自定义渲染器(和Android - 正常工作)。

自定义渲染器主要设置背景颜色和文本颜色。

设置文本颜色适用于启用和禁用状态,但我在设置不同状态下按钮的背景颜色时遇到问题。

我找不到Xamarin自定义渲染器的任何文档,这是Xamarin的一个已知错误,我无法在Visual Studio中为iOS类工作任何intellisense,到目前为止我还没有。我使用了可以在主题上找到的资源。

    public class MyButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.BackgroundColor= UIColor.FromRGB(235, 115, 17);

                Control.SetTitleColor(UIColor.FromRGB(255, 255, 255),UIControlState.Normal);
                Control.SetTitleColor(UIColor.FromRGB(0, 0, 0),UIControlState.Disabled);
            }
        }
    } 

如果按钮UIControlStateDisabled,我希望能够将背景颜色更改为我设置的颜色以外的其他颜色。

在此图像中,按钮使用自定义渲染器。顶部按钮被禁用,底部被启用。正如您可能猜到的,我想将禁用的按钮设置为灰色。

The top button is disabled, bottom enabled.

我确信这一定非常简单,但缺乏文件和非智能感问题阻碍了我的努力。

1 个答案:

答案 0 :(得分:3)

您可以覆盖OnElementPropertyChanged以跟踪属性更改。

protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
    base.OnElementChanged(e);

    ....

    UpdateBackground();
}

protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    base.OnElementPropertyChanged(sender, e);

    if (e.PropertyName == VisualElement.IsEnabledProperty.PropertyName)
        UpdateBackground();
}

void UpdateBackground()
{
    if (Control == null || Element == null)
        return;

    if (Element.IsEnabled)
        Control.BackgroundColor = ..;
    else
        Control.BackgroundColor = ..;
}