gpt4 book ai didi

c# - Xamarin.Forms - 标签 FontSize OnPlatform - XAML 错误

转载 作者:行者123 更新时间:2023-11-30 20:29:19 24 4
gpt4 key购买 nike

我有这个代码:

  <Label x:Name="questionGroupHintInfoLabel" FontAttributes="Bold"  Text="Folgende Hinweismeldung wurde für die aktuelle Fragengruppe hinterlegt:">
<Label.FontSize>
<OnPlatform x:TypeArguments="NamedSize"
iOS="Small"
Android="Small" />
</Label.FontSize>
</Label>

...并得到这个错误:

No property, bindable property, or event found for FontSize

我做错了什么?

谢谢。

最佳答案

通常当我们设置FontSize="value"时,FontSizeConverter转换为 expected type (即 double)来设置值。

但是在我们使用OnPlatform的时候好像没有用到这个转换器。所以我们有两个选择:

  1. 使用 OnPlatform 并将 x:Double 作为类型参数。

    <OnPlatform x:TypeArguments="x:Double"
    iOS="20"
    Android="25" />
  2. 或者,欺骗 XAML 处理器为我们进行转换 - 我们可以使用 StaticResource 标记扩展来完成。 注意: 这仅在未应用 XAMLC 时有效。

    <!-- App.Resources or ContentPage.Resources -->
    <ResourceDictionary>
    <OnPlatform x:Key="FontNamedSize" x:TypeArguments="x:String"
    iOS="Small"
    Android="Large" />
    </ResourceDictionary>

    <!-- now you can use static-resource extension to use above defined value -->
    <Label x:Name="questionGroupHintInfoLabel"
    FontAttributes="Bold"
    Text="Folgende Hinweismeldung wurde für die aktuelle Fragengruppe hinterlegt:"
    FontSize="{StaticResource FontNamedSize}" />
  3. 推荐使用 NamedSize 可绑定(bind)属性扩展 Label 并转换为 FontSize(基本上是 FontSizeConverter 可以)。

    public class ExLabel : Label
    {
    public static readonly BindableProperty FontNamedSizeProperty =
    BindableProperty.Create(
    "FontNamedSize", typeof(NamedSize), typeof(ExLabel),
    defaultValue: default(NamedSize), propertyChanged: OnFontNamedSizeChanged);

    public NamedSize FontNamedSize
    {
    get { return (NamedSize)GetValue(FontNamedSizeProperty); }
    set { SetValue(FontNamedSizeProperty, value); }
    }

    private static void OnFontNamedSizeChanged(BindableObject bindable, object oldValue, object newValue)
    {
    ((ExLabel)bindable).OnFontNamedSizeChangedImpl((NamedSize)oldValue, (NamedSize)newValue);
    }

    protected virtual void OnFontNamedSizeChangedImpl(NamedSize oldValue, NamedSize newValue)
    {
    FontSize = Device.GetNamedSize(FontNamedSize, typeof(Label));
    }
    }

    <!-- Usage -->
    <local:ExLabel HorizontalOptions="Center" VerticalOptions="Center" Text="This is a custom label">
    <local:ExLabel.FontNamedSize>
    <OnPlatform x:TypeArguments="NamedSize"
    iOS="Large"
    Android="Medium" />
    </local:ExLabel.FontNamedSize>
    </local:ExLabel>

编辑 1:选项 2 仅在未应用 XAMLC 时有效。

编辑 2: 添加选项 3。

注意:有一个bug fix available in pre-release versions这也可以被视为替代修复。但我无法确认它是否已在最新版本中修复。

关于c# - Xamarin.Forms - 标签 FontSize OnPlatform - XAML 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46274052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com