2017-12-15 12 views
0

私はUWPアプリケーションを持っており、埋め込みXamarinフォームを試しています。これまで埋め込みそのものが機能しています。しかし、私はフォームを初期化した後、特定のTextStylesが機能しなくなったことに気付きました。 Forms.Init後enter image description hereXamarinフォームの初期化時にテキストスタイルが適用されない

:フォームなし

のTextBlockのコード

Xamarin.Forms.Forms.Init(e); 

enter image description here

唯一の違いは、App.xaml.csで、このラインであります:

<TextBlock x:Name="TitlePage" 
        Text="Hello" 
        Style="{StaticResource PageTitleStyle}" /> 

とスタイル:https://github.com/NPadrutt/EmbeddedFormsTest

バージョン:

<Style x:Key="PageTitleStyle" 
     TargetType="TextBlock"> 
    <Setter Property="VerticalAlignment" 
      Value="Center" /> 
    <Setter Property="FontWeight" 
      Value="SemiLight" /> 
    <Setter Property="FontSize" 
      Value="{StaticResource LargeFontSize}" /> 
    <Setter Property="TextTrimming" 
      Value="CharacterEllipsis" /> 
    <Setter Property="TextWrapping" 
      Value="NoWrap" /> 
    <Setter Property="Margin" 
      Value="{StaticResource PageTitleMargin}" /> 
</Style> 

私はあなたがここに見つけることができる最小限の例を作成

  • VS 15.5.2
  • Xamarin.Formsを2.5.0.121934
  • Microsoft.NETCore.UniversalWindowsPlatform 6.0.5

答えて

1

Xamarin.Forms.Forms.Init(e);を実行すると、Xamarinで定義されているResourceDictionaryが読み込まれます。このコード行が呼び出された後、テキストには、UWPで定義したスタイルではなく、Xamarinフォームで定義されたスタイルが表示されることがあります。詳細はInitメソッドのコードスニペットを確認できます。更新

Init方法は、このコード行

return new Windows.UI.Xaml.ResourceDictionary { 
Source = new Uri("ms-appx:///Xamarin.Forms.Platform.UAP/Resources.xbf") 

によってスタイルをマージそして、あなたはXamarinでResource.xamlで次のスタイルを見つけるでしょう。あなたのスタイルがオーバーライドされますように、あなたが定義したのと同じx:key(PageTitleStyle)が

<Style x:Key="PageTitleStyle" TargetType="TextBlock"> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 

スタイルのx:keyを変更するだけです。は、Xamarinのリソースの影響を受けません(例:PageTitleStyle2)。

XamarinフォームでUWPアプリケーションで定義したスタイルを使用する場合は、Custom Renderersを使用できます。 TextBlockはUWPのネイティブコントロール、XamarinフォームのコンテンツコントロールはLabelです。詳細はRenderer Base Classes and Native Controlsをご覧ください。 XamarinフォームにLabelコントロールを用意し、Labelのカスタムレンダラーを作成し、UWPでターゲットタイプのスタイルをTextBlockに設定する必要があります。例:

public class MyLabelRenderer : LabelRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
    { 
     base.OnElementChanged(e); 
     Control.Style= (Windows.UI.Xaml.Style)App.Current.Resources["PageTitleStyle"]; 
    } 
} 

さらに多くのサンプルについては、thisを参照できます。

+0

あなたの答えをありがとう。ちょうど確かに、私がInit xamarin Formsを使うと、ネイティブUWPコントロールのすべてのスタイルが機能しなくなるでしょうか?上記のTextblockはUWPのネイティブメインページにあるためです。 – NPadrutt

+0

@NPadrutt、すべてではありません。上で述べたように、 'init'メソッドはXamarinの' Resource'をあなたが定義したスタイルと同じ名前だけをマージします。返信を更新してより明確にします。 –

+0

@ sunteen-wu-msft AH、大丈夫です。それはそれを説明する。私のネイティブUWPスタイルは、xamarinスタイルでオーバーライドされました。私は自分のネイティブUWPスタイルの名前を調整しなければなりませんでした。説明ありがとう!! :) – NPadrutt

関連する問題