Xamarin.forms 如何更改ListView项目的字体系列

Xamarin.forms 如何更改ListView项目的字体系列,xamarin.forms,Xamarin.forms,我有一个ListView,我使用标准的“本机”模板和组 如何设置组标题和项目中文本的字体?下面是一个在列表标题中设置动态布局选项的示例,您可以为单个标签预先设置这些属性并自定义标题。现在,您可以根据需要设置自己的字体系列、颜色或字体大小,也可以自定义标题单元格,它只是一个ItemTemplate <ListView x:Name="ListView" IsGroupingEnabled="true"> <ListView.GroupHeaderTemplate>

我有一个ListView,我使用标准的“本机”模板和组


如何设置组标题和项目中文本的字体?

下面是一个在
列表标题
中设置动态
布局选项的示例,您可以为单个标签预先设置这些属性并自定义标题。现在,您可以根据需要设置自己的字体系列、颜色或字体大小,也可以自定义标题单元格,它只是一个
ItemTemplate

<ListView x:Name="ListView" IsGroupingEnabled="true">
    <ListView.GroupHeaderTemplate>
        <DataTemplate>
            <ViewCell>
                <Label
                    HorizontalOptions="{Binding Optn}"
                    Text="{Binding Heading}"
                    VerticalOptions="{Binding Optn}" />
            </ViewCell>
        </DataTemplate>
    </ListView.GroupHeaderTemplate>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Label Text="{Binding DisplayName}" />
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>


快乐编码

我已经用这个修复了文本和细节标签

public class MyTextCellRenderer : TextCellRenderer
{
    public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
    {
        var cell = base.GetCell(item, reusableCell, tv);

        if (cell.TextLabel.Font.FamilyName != CommonStyles.RegularFontName)
        {
            cell.TextLabel.Font = UIFont.FromName(
                CommonStyles.RegularFontName, cell.TextLabel.Font.PointSize);

            cell.DetailTextLabel.Font = UIFont.FromName(
                CommonStyles.RegularFontName, cell.DetailTextLabel.Font.PointSize);
        }

        return cell;
    }
}
对于节标题,这最初是有效的

UILabel.AppearanceWhenContainedIn(typeof(UITableView)).Font = ...
当节标题从屏幕上滚下并再次打开时,它将恢复为标准标题

但这是有效的

public class CustomTableViewRenderer : TableViewRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<TableView> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            Control.Source = new CustomTableViewModelRenderer(e.NewElement);
        }
    }
}

public class CustomTableViewModelRenderer : UnEvenTableViewModelRenderer
{
    public CustomTableViewModelRenderer(TableView model) : base(model)
    {
    }

    public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section)
    {
        if (headerView is UITableViewHeaderFooterView view)
        {
            view.TextLabel.Font = UIFont.FromName(CommonStyles.RegularFontName, 18);
        }
    }
}
公共类CustomTableViewRenderer:TableViewRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(例如NewElement!=null)
{
Control.Source=新的CustomTableViewModelRenderer(例如NewElement);
}
}
}
公共类CustomTableViewModelRenderer:TableViewModelRenderer
{
公共CustomTableViewModelRenderer(TableView模型):基础(模型)
{
}
public override void WillDisplayHeaderView(UITableView表格视图、UIView headerView、第九节)
{
if(headerView为UITableViewHeaderFooterView视图)
{
view.textlab.Font=UIFont.FromName(CommonStyles.RegularFontName,18);
}
}
}

更改某些字体需要大量代码。

在您的示例中没有提到字体系列。我希望避免使用自定义模板。在标题标签中可以使用道具
FontFamily
并且它是
ListView.GroupHeaderTemplate
属性当您想要使用font family时,您需要在某个地方指定它。两个参考链接:1)。2)