Xamarin.forms Xamarin表单自定义内容视图(复合控件)隐式样式错误

Xamarin.forms Xamarin表单自定义内容视图(复合控件)隐式样式错误,xamarin.forms,Xamarin.forms,这看起来应该很简单,但我一直无法找到解决方案 我在示例项目中定义了以下内容: ReadOnlyField.xaml <?xml version="1.0" encoding="UTF-8"?> <ContentView x:Name="ReadOnlyFieldContentView" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/x

这看起来应该很简单,但我一直无法找到解决方案

我在示例项目中定义了以下内容:

ReadOnlyField.xaml

<?xml version="1.0" encoding="UTF-8"?>

<ContentView x:Name="ReadOnlyFieldContentView" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TabbedPageDemo.Views.ReadOnlyField">
    <StackLayout Spacing="4">
        <Label FontSize="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=HeaderFontSize}" Text="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=HeaderText}" />
        <Label FontSize="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=DetailFontSize}" Text="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=DetailText}" />
    </StackLayout>
</ContentView>
<?xml version="1.0" encoding="utf-8" ?>

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:v="clr-namespace:TabbedPageDemo.Views" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TabbedPageDemo.Views.Page2">
    <ContentPage.Resources>
        <Style TargetType="v:ReadOnlyField">
            <!-- <Setter Property="HeaderFontSize" Value="14" /> -->
            <!-- <Setter Property="DetailFontSize" Value="12" /> -->
        </Style>
    </ContentPage.Resources>

    <ScrollView x:Name="ScrollView1" Padding="4">
        <StackLayout x:Name="StackLayout0">
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 1" DetailText="Detail 1" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 2" DetailText="Detail 2" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 3" DetailText="Detail 3" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 4" DetailText="Detail 4" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 5" DetailText="Detail 5" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 6" DetailText="Detail 6" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 7" DetailText="Detail 7" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 8" DetailText="Detail 8" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 9" DetailText="Detail 9" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 10" DetailText="Detail 10" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 11" DetailText="Detail 11" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 12" DetailText="Detail 12" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 13" DetailText="Detail 13" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 14" DetailText="Detail 14" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 15" DetailText="Detail 15" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 16" DetailText="Detail 16" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 17" DetailText="Detail 17" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 18" DetailText="Detail 18" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 19" DetailText="Detail 19" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 20" DetailText="Detail 20" />
        </StackLayout>
    </ScrollView>
</ContentPage>
Page2.xaml

<?xml version="1.0" encoding="UTF-8"?>

<ContentView x:Name="ReadOnlyFieldContentView" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TabbedPageDemo.Views.ReadOnlyField">
    <StackLayout Spacing="4">
        <Label FontSize="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=HeaderFontSize}" Text="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=HeaderText}" />
        <Label FontSize="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=DetailFontSize}" Text="{Binding Source={x:Reference ReadOnlyFieldContentView}, Path=DetailText}" />
    </StackLayout>
</ContentView>
<?xml version="1.0" encoding="utf-8" ?>

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:v="clr-namespace:TabbedPageDemo.Views" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TabbedPageDemo.Views.Page2">
    <ContentPage.Resources>
        <Style TargetType="v:ReadOnlyField">
            <!-- <Setter Property="HeaderFontSize" Value="14" /> -->
            <!-- <Setter Property="DetailFontSize" Value="12" /> -->
        </Style>
    </ContentPage.Resources>

    <ScrollView x:Name="ScrollView1" Padding="4">
        <StackLayout x:Name="StackLayout0">
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 1" DetailText="Detail 1" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 2" DetailText="Detail 2" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 3" DetailText="Detail 3" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 4" DetailText="Detail 4" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 5" DetailText="Detail 5" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 6" DetailText="Detail 6" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 7" DetailText="Detail 7" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 8" DetailText="Detail 8" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 9" DetailText="Detail 9" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 10" DetailText="Detail 10" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 11" DetailText="Detail 11" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 12" DetailText="Detail 12" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 13" DetailText="Detail 13" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 14" DetailText="Detail 14" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 15" DetailText="Detail 15" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 16" DetailText="Detail 16" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 17" DetailText="Detail 17" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 18" DetailText="Detail 18" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 19" DetailText="Detail 19" />
            <v:ReadOnlyField HeaderFontSize="14" DetailFontSize="12" HeaderText="Header 20" DetailText="Detail 20" />
        </StackLayout>
    </ScrollView>
</ContentPage>
我想做的是使用隐式样式,比如我试图定义的样式,这样我就不必多次指定属性值

我错过了什么/做错了什么?

该错误是由访问修饰符引起的

请将
private
更改为
public

更改:

private static readonly BindableProperty DetailFontSizeProperty;
    private static readonly BindableProperty DetailTextProperty;
    private static readonly BindableProperty HeaderFontSizeProperty;
    private static readonly BindableProperty HeaderTextProperty;
public static readonly BindableProperty DetailFontSizeProperty;
    public static readonly BindableProperty DetailTextProperty;
    public static readonly BindableProperty HeaderFontSizeProperty;
    public static readonly BindableProperty HeaderTextProperty;
至:

private static readonly BindableProperty DetailFontSizeProperty;
    private static readonly BindableProperty DetailTextProperty;
    private static readonly BindableProperty HeaderFontSizeProperty;
    private static readonly BindableProperty HeaderTextProperty;
public static readonly BindableProperty DetailFontSizeProperty;
    public static readonly BindableProperty DetailTextProperty;
    public static readonly BindableProperty HeaderFontSizeProperty;
    public static readonly BindableProperty HeaderTextProperty;
您可以使用
x:Key属性定义
样式
,如下所示。该属性应与您定义的BindableProperty匹配

<ContentPage.Resources>
    <Style x:Key="ReadOnlyFieldStyle" TargetType="v:ReadOnlyField">
        <Setter Property="HeaderFontSize" Value="14" />    
        <Setter Property="DetailFontSize" Value="12" />
        <!--<Setter Property="HeaderText" Value="Header1"></Setter>
        <Setter Property="DetailText" Value="Detail"></Setter>-->
    </Style>

并使用该样式

<v:ReadOnlyField Style="{Binding StaticResource ReadOnlyFieldStyle}" HeaderText="Header 1" DetailText="Detail 1"></v:ReadOnlyField>
        <v:ReadOnlyField Style="{Binding StaticResource ReadOnlyFieldStyle}" HeaderText="Header 2" DetailText="Detail 2"></v:ReadOnlyField>

结果: