2017-07-17 9 views
1

これは私が試みたものです。コンストラクタの変更は機能しますが、私は動的に変更することはできません。 Xamarin C#でラベルのテキストの色を動的に変更する方法はありますか?

public PhrasesFrame() 
    { 
     InitializeComponent(); 
     correctButton.Clicked += correctButtonClicked; 
     resetButton.Clicked += resetButtonClicked; 
     faveLabel.BackgroundColor = Color.Red; 
     faveLabel.GestureRecognizers.Add(new TapGestureRecognizer 
     { 
      Command = new Command(() => FaveLabelTapped()) 
     }); 
     // this works 
     faveLabel.TextColor = Color.Red; 

    } 

    void FaveLabelTapped() 
    { 
     AS.phrase.Favorite = !AS.phrase.Favorite; 
     if (AS.phrase.Favorite) { 
      // this gives an error 
      faveLabel.TextColor = Color.Red; 
     } else { 
      faveLabel.TextColor = Color.Yello; 
     } 
     App.DB.UpdateFavorite(AS.phrase.Favorite, AS.phrase.PhraseId); 
    } 

は私に

色は現在のコンテキスト内に存在しないメッセージを与えます

誰かが私がFaveLabelTappedメソッド内から変更することができますどのようになど、いくつかのアイデアを与えることはできますか?

+0

あなたはこの – Jimbot

+0

のためにバインディングを使用することもできますがあります私はバインディングでこれを行うことができる簡単な方法?私が持っている方法は、別の方法ではうまくいけばかなり簡単に思える。 – Alan2

+0

'Xamarin.Forms' _namespace_に必要な' using'ステートメントを含めましたか? – Curiousity

答えて

0

あなたが本当にstugglingている場合は、なぜあなたはちょうどこのような何かすることはできません。

public PhrasesFrame() 
    { 
     InitializeComponent(); 
     correctButton.Clicked += correctButtonClicked; 
     resetButton.Clicked += resetButtonClicked; 
     faveLabel.BackgroundColor = Color.Red; 
     faveLabel.GestureRecognizers.Add(new TapGestureRecognizer 
     { 
      Command = new Command(() => 
      { 
       AS.phrase.Favorite = !AS.phrase.Favorite; 
       if (AS.phrase.Favorite) 
       { 
         faveLabel.TextColor = Color.Red; 
       } 

       App.DB.UpdateFavorite(AS.phrase.Favorite, AS.phrase.PhraseId); 
      }) 
     }); 
    } 

が同じポイントであなたのコマンドを作成し、あなたがそれはあなたが正しくラベルへのポインタを関連付けることができます割り当てます。また、他の場所で 'FaveLabelTapped()'メソッドを使用することを気にしない限り、独自のメソッドにリファクタリングする必要はありません。

EDIT:

それはそれは正しく実行時に「色」クラスへの参照を解決していない可能ですので、あなたも試みることができる:

void FaveLabelTapped() 
{ 
    AS.phrase.Favorite = !AS.phrase.Favorite; 
    if (AS.phrase.Favorite) { 
     // this gives an error 
     faveLabel.TextColor = Xamarin.Forms.Color.Red; //Change this to include the assembly reference. 
    } 
    App.DB.UpdateFavorite(AS.phrase.Favorite, AS.phrase.PhraseId); 
} 
+1

ありがとうございます。私はそれを試してみる。しかし、他の方法がうまくいかない理由はわかりません。メソッドでこれを実行する理由は、この部分クラスを持つ異なるファイル間で機能を分割したくないためです。それをメソッドに移動すると、カラー割り当てが機能しなくなるのではないかと思いますか? – Alan2

+0

実行時の競合が発生する可能性があります。派生クラスに 'Color'というプロパティが含まれているアセンブリが参照されていますか? – Digitalsa1nt

関連する問題