自定义字体Xamarin.Forms?

问题描述:

我只是在Xamarin.Forms中定制字体。 我想在我的整个应用程序中设置自定义字体。 我读了许多笔记,文章等,定义Xamarin.Forms中的自定义字体,但他们只显示如何将字体更改为某些控件,如标签,按钮等。自定义字体Xamarin.Forms?

我想设置自定义字体来控制哪些没有字体属性(例如Picker)。

是否可以这样做。

我如何定制我的应用程序中使用的每种字体?

+1

由于Xamarin.Forms社区现在知道,如果它没有定义,那么你转到答案是自定义渲染器。不幸的是,这就是我所能提供的。在一个侧面说明,我会说它不是一个好主意,改变从默认字体。谷歌/苹果花费大量的金钱/时间研究最佳字体。 – Johan

+0

@Johan:没错,但就我而言,我正在研究一个特殊的应用程序,该应用程序需要根据相应应用程序的性质独立进行独特的设计和风格,并且还决定了该应用程序中是否存在该应用程序市场。我的客户严格遵守这些条款。 – Vaikesh

+0

这是正确的@Johan说:通过CustomRenderers对所有不允许直接设置自定义字体的控件进行操作。 但是,也许最好使用Xamarin.Android和Xamarin.iOS的原生UI工具包,因为你没有太多的自定义限制。 – Wosi

在没有字体属性的控件上,您需要为每个平台使用自定义渲染器。不幸的是,除非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>