2017-10-03 10 views
1

iOS (및 Android - 잘 작동) 용 사용자 정의 렌더러를 선언했습니다.버튼 용 Xamarin 사용자 정의 렌더러

사용자 지정 렌더러는 주로 배경색과 텍스트 색을 설정합니다.

활성화 또는 비활성화 상태에서 텍스트 색상을 올바르게 설정했지만 버튼의 배경색을 다른 상태로 설정하는 데 문제가 있습니다.

Xamarin 커스텀 렌더러에 대한 설명서를 찾을 수 없었습니다. Visual Studio에서 iOS 클래스에 대해 인텔리 센스를 사용할 수 없다는 Xamarin의 알려진 버그입니다. 지금까지 리소스 I 주제를 찾으십시오.

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.

나는이 매우 간단해야 확신하지만, 문서의 부족과 노 인텔리 문제는 내 노력을 방해하고 있습니다.

답변

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 = ..; 
}