我在内容页面中定义了以下样式:
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type ContentView}" x:Key="ColorScaleGordura">
<Setter Property="Content">
<Setter.Value>
<StackLayout Orientation="Horizontal" Padding="15,0,15,0" HorizontalOptions="Center" Spacing="15" HeightRequest="30">
<Frame BackgroundColor="{StaticResource ColorScaleRed}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleDarkOrange}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleOrange}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleYellow}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleLightGreen}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleGreen}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
<Frame BackgroundColor="{StaticResource ColorScaleDarkGreen}" Style="{StaticResource NutrientColorFrameStyle}">
<Label Text="G" Style="{StaticResource NutrientInitialsStyle}"/>
</Frame>
</StackLayout>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</ContentPage.Resources>
这是应该的样子:
我将其作为一种样式,因为我需要它在页面中重复很多次。我这样使用它:
<ContentView Style="{StaticResource ColorScaleGordura}"/>
它有效!但是只有一次。无论我将代码行粘贴在页面上的哪个位置,都只能使用其中的一行(通常是页面下方的另一行)。如果我做这样的事情:
<StackLayout>
<Label Text="test1"/>
<ContentView Style="{StaticResource ColorScaleGordura}"/>
<StackLayout>
<Label Text="test2"/>
<ContentView Style="{StaticResource ColorScaleGordura}"/>
<StackLayout>
<Label Text="test3"/>
<ContentView Style="{StaticResource ColorScaleGordura}"/>
</StackLayout>
</StackLayout>
</StackLayout>
这就是我得到的:
我想念什么?
答案 0 :(得分:0)
问题是,您正在尝试将相同的Content
添加到多个ContentView
中。元素(以样式表示)不能添加到多个逻辑父级中。为避免这种情况,您可以将x:Shared="False"
设置为Style
。
但是我相信x:Shared
仅适用于WPF应用程序。我认为Xamarin.Forms
没有其他替代方法。如果您打算重复StackLayout
,则可以尝试将RepeaterView
与DataTemplate
一起使用以达到预期效果。
可以使用workaround来执行此操作,但是CreateContent()
方法似乎不可用。不过,如果上述解决方案对您不起作用,您仍可以使其正常工作。