2015-10-16 86 views
0

我只是在Xamarin.Forms中定製字體。 我想在我的整個應用程序中設置自定義字體。 我讀了許多筆記,文章等,定義Xamarin.Forms中的自定義字體,但他們只顯示如何將字體更改爲某些控件,如標籤,按鈕等。自定義字體Xamarin.Forms?

我想設置自定義字體來控制哪些沒有字體屬性(例如Picker)。

是否可以這樣做。

我如何定製我的應用程序中使用的每種字體?

+1

由於Xamarin.Forms社區現在知道,如果它沒有定義,那麼你轉到答案是自定義渲染器。不幸的是,這就是我所能提供的。在一個側面說明,我會說它不是一個好主意,改變從默認字體。谷歌/蘋果花費大量的金錢/時間研究最佳字體。 – Johan

+0

@Johan:沒錯,但就我而言,我正在研究一個特殊的應用程序,該應用程序需要根據相應應用程序的性質獨立進行獨特的設計和風格,並且還決定了該應用程序中是否存在該應用程序市場。我的客戶嚴格遵守這些條款。 – Vaikesh

+0

這是正確的@Johan說:通過CustomRenderers對所有不允許直接設置自定義字體的控件進行操作。 但是,也許最好使用Xamarin.Android和Xamarin.iOS的原生UI工具包,因爲你沒有太多的自定義限制。 – Wosi

回答

1

在沒有字體屬性的控件上,您需要爲每個平臺使用自定義渲染器。不幸的是,除非Xamarin Forms公開該財產,否則沒有別的辦法。

有關WinPhone撿拾例如,在CustomRenderer

protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e); 

      switch (e.PropertyName) 
      { 
       case "Renderer": 

        ((ListPicker)((System.Windows.Controls.Grid)this.Control).Children[0]).FullModeItemTemplate = (System.Windows.DataTemplate)App.Current.Resources["PickerItemTemplate"]; 
        ((ListPicker)((System.Windows.Controls.Grid)this.Control).Children[0]).FullModeItemTemplate = (System.Windows.DataTemplate)App.Current.Resources["ListItemTemplate"]; 

        break; 
      } 
     } 

有了這兩個資源

<DataTemplate x:Key="PickerItemTemplate"> 
     <StackPanel MinWidth="1000"> 
      <TextBlock Text="{Binding Data}" Opacity="{Binding Opacity}" /> 
     </StackPanel> 
    </DataTemplate> 
    <DataTemplate x:Key="ListItemTemplate"> 
     <StackPanel Margin="0,15,0,15"> 
      <TextBlock Text="{Binding Data}" FontSize="22" TextWrapping="Wrap"></TextBlock> 
     </StackPanel> 
    </DataTemplate>