2017-05-29 11 views
0

これは私のサンプルコードです。Xamarin.FormsのエントリのBackgroundColorが無効になっても変更されていない

Entry entry= new Entry(); 
entry.BackgroundColor=Color.Teal; 
entry.Enabled=false; 

エントリの背景色が無効な状態で変更されていないことがわかります。実際の動作ですか?その場合、どのようにしてエントリーコントロールのEnable状態とDisable状態を区別できるか。

DisabledEntryImage

答えて

0

これはデフォルトの動作です。無効な項目のスタイルは、コントロールが実際のプロパティを持っていないかぎり、サポートされているものではありません。いくつかの異なる方法で簡単に実装できます。 1つは、のようなバインド可能なプロパティを持つカスタムEntryを作成することです。無効なEntryフィールドのカスタムスタイルを設定することができます。

オプション1:カスタムエントリ

public class ExtendedEntry : Entry 
{ 
    private Style normalStyle; 

    public Style DisabledStyle 
    { 
    get { return (Style)GetValue(DisabledStyleProperty); } 
    set { SetValue(DisabledStyleProperty, value); } 
    } 

    public static readonly BindableProperty DisabledStyleProperty = BindableProperty.Create(nameof(DisabledStyle), typeof(Style), typeof(ExtendedEntry), null, BindingMode.TwoWay, null, (obj, oldValue, newValue) => { }); 

    public ExtendedEntry() 
    { 
     normalStyle = this.Style; 
     this.PropertyChanged += ExtendedEntry_PropertyChanged; 
    } 

    private void ExtendedEntry_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
    if (e.PropertyName == nameof(IsEnabled) && this.DisabledStyle != null) 
    { 
     if (this.IsEnabled) 
     this.Style = normalStyle; 
     else 
     this.Style = DisabledStyle; 
    } 
    } 
} 

オプション2:トリガ

別のオプションは、トリガーを使用することです:

<Entry Placeholder="enter name"> 
    <Entry.Triggers> 
     <Trigger TargetType="Entry" 
      Property="IsEnabled" Value="True"> 
      <Setter Property="BackgroundColor" Value="Yellow" /> 
     </Trigger> 
    </Entry.Triggers> 
</Entry> 
関連する問題