2017-02-16 2 views
0

Color(Xamarin.Forms)を返す関数に奇妙な問題があります。私の考えは、異なる背景を持つボックスをAppointmentStatusに応じて表示することです。私は、この関数を呼び出した場合rtnは私が期待した色を持っていますが、画面上で、私は任意の色を見ることができないこのXamarinフォーム:Xamarin.Forms.Colorを返す関数で異常な動作が発生する

public static Color ColorForStatus(this AppointmentStatus status) 
{ 
    Color rtn = Color.Transparent; 

    switch (status) 
    { 
     case AppointmentStatus.Active: 
      rtn = Color.FromHex("#654BE"); 
      break; 
     case AppointmentStatus.Cancelled: 
      rtn = Color.FromHex("#E14063"); 
      break; 
     case AppointmentStatus.Completed: 
      rtn = Color.FromHex("#C4E7EE"); 
      break; 
     case AppointmentStatus.Hold: 
      rtn = Color.FromHex("#84CEDD"); 
      break; 
     case AppointmentStatus.InProgress: 
      rtn = Color.FromHex("#B1D1DE"); 
      break; 
     case AppointmentStatus.Paused: 
      rtn = Color.FromHex("#F1E19E"); 
      break; 
     default: 
      rtn = Color.Transparent; 
      break; 
    } 

    return rtn; 
} 

のような列挙型の拡張を作成しました。それを修正しようとするには、その後、私は同様のコード

public static class ColourHelpers 
{ 
    /// <summary> 
    /// Determine the color for an appointment status 
    /// </summary> 
    /// <param name="status">The status.</param> 
    /// <returns>Color.</returns> 
    public static Color ColorForStatus(this AppointmentStatus status) 
    { 
     Color rtn = Color.Transparent; 

     switch (status) 
     { 
      case AppointmentStatus.Active: 
       rtn = Color.FromHex("#654BE"); 
       break; 
      case AppointmentStatus.Cancelled: 
       rtn = Color.FromHex("#E14063"); 
       break; 
      case AppointmentStatus.Completed: 
       rtn = Color.FromHex("#C4E7EE"); 
       break; 
      case AppointmentStatus.Hold: 
       rtn = Color.FromHex("#84CEDD"); 
       break; 
      case AppointmentStatus.InProgress: 
       rtn = Color.FromHex("#B1D1DE"); 
       break; 
      case AppointmentStatus.Paused: 
       rtn = Color.FromHex("#F1E19E"); 
       break; 
      default: 
       rtn = Color.Transparent; 
       break; 
     } 

     return rtn; 
    } 
} 

と機能を作成し、この場合も結果は同じです。 Visual Studioで値をチェックすると値は正しいように見えますが、関数はunknown identifierです。イメージを参照してください。メインに、私は同じスイッチを使用している場合は、下の画像に表示できるよう

What?

は、私は、画面内の色を見ることができます。

Screen

私はViewModelににこの関数を呼び出します。

public override async void LoadData(string search = "") 
{ 
    AppointmentList = new ObservableCollection<Appointment>(
             repo.GetAppointments().ToList()); 

    foreach (Appointment app in AppointmentList) 
    { 
     // this is working (it's the background of "Work" frame) 
     switch (app.AppointmentType) 
     { 
      case AppointmentType.Quote: 
       app.BoxColor = Settings.BoxColorQuoteSettings; 
       break; 
      default: 
       app.BoxColor = Settings.BoxColorJobSettings; 
       break; 
     } 

     // they don't work 
     app.StatusColor = app.Status.StatusColor(); // with extensions 
     app.StatusColor = ColourHelpers.ColorForStatus(app.Status); // with function 

     // this is working 
     app.StatusColor = Settings.BoxColorJobSettings; 
    } 
} 

UPDATE 私はDebug windowapp.StatusColorの値を印刷し、私が期待する結果を参照してください。

Debug window

事前にありがとうございます。

+0

メイン機能全体のコードを投稿できますか。どのように呼び出すことができますか? –

+0

主な機能はかなり複雑です。私はそこにViewModelを持っています。私はそれを私が呼んでいる部分のコードだけを公開します。 – Enrico

+0

'Debug.WriteLine($" Color {ColourHelpers.ColorForStatus(app.Status)} ");'を追加し、それが何を表示するかを確認します。私はそれが「透明」を返すと思います。 –

答えて

0

私は問題を修正する必要があります例えば、各色にアルファチャンネル値を追加すると思う:

#654BEた、#FF654BE

+0

'Color.FromHex()'は、指定されていない場合、不透明度を 'ff'に設定します。 –

+0

@StephaneDelcroix興味深いのはなぜ 'A = 0'ですか、あなたは知っていますか? –

+0

私の答えを参照してください... –

5

あるべき問題は、このラインである

rtn = Color.FromHex("#654BE"); 

あなたは」 FromHexに長さ5文字( '#'を付けずに)を渡します。これは必須のフォーマットではありません。結果は未定義です。オプションの先頭#

  • rgb
  • rrggbb
  • argb
  • aarrggbb

Color.FromHex()ファクトリメソッドは、次の形式のいずれかを期待します。あなたのケースで

、入力文字列654BEは、次int値(それぞれ)とRGBA値に分割さUINT値414910、に変換される:6、84、190、0とアルファチャネルが0されますあなたの色が現れない理由。

関連する問題