2017-01-04 8 views
0

XAMLを排他的に使用する各プラットフォームのラベルのフォントに特定のサイズを使用しようとしています。このコードは正常に動作します。XAMLを使用してオンプラットフォームでnamedSizeを使用する

<Label x:Name="DescricaoLabel" 
       Grid.Row="1" 
       Grid.Column="0" 
       HorizontalTextAlignment="Start" 
       Text="{Binding Descricao}" 
       TextColor="#426d76"> 
      <Label.Font> 
       <OnPlatform x:TypeArguments="Font" 
          Android="14" 
          iOS="Micro" /> 
      </Label.Font> 
</Label> 

ただし、タグLabel.Fontは廃止とマークされています。

<Label.FontSize> 
     <OnPlatform x:TypeArguments="x:Double" 
         Android="14" 
         iOS="Micro" /> 
</Label.FontSize> 

しかし、私は理由NamedSize「マイクロ」の使用をコンパイルすることができませんでしたタグLabel.FontSizeを使用して:私はこれを試してみました。

XAML内でdouble型のNamedSizeを使用し、廃止されたタグを使用しない場合の最良の方法は何ですか?

答えて

0

タイプは同じタイプである必要があります。デフォルトのサイズと名前の両方を指定することはできません。

NamedSizeは、組み込み静的コンバータを介して動作します。あなた自身のコンバータを書くことができます。多分文字列として変換してから変換します。または、パラメータ付きコンバータを使用し、値とタイプを指定します。

デフォルトのシナリオは、達成しようとしているシナリオを処理しません。あなたは以下のコンバータについての詳細を読むことができます

public class StringToSizeConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     double size; 
     if(double.TryParse(value.ToString, out size)) 
     { 
      //this is a double 
      return size;    
     }  
     // its a named size, so convert the named size to enum 
     NamedSize namedSize; 
     if (Enum.TryParse(value.ToString, true, out namedSize)) 
     { 
      return Device.GetNamedSize(NamedSize.Default, typeof(Label)); 
     }  
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

別の代替的なアプローチは、あなたのapp.csやアプリで名前のラベルスタイルを定義することです。 xaml.csにフォントサイズを設定し、そのスタイルをXAMLで使用します。その場合、XAMLでOnPlatformを使用する必要はありません。これはCSファイルにあります。

+0

コンバーターを使用してコードを教えてください。私はこのソリューションをどのように使うことができないのか分かりません。 –

+0

私は説明したサンプル疑似コードを追加しました。 –

+0

私はonPlatformとコンバーターを使いこなしましたが、このアプローチには問題があるようです。私はまだこれをテストすることができませんでした... –

関連する問題