有没有办法在不使用StackLayout的情况下在ViewCell中编写标签和开关?

时间:2017-07-25 15:39:06

标签: xamarin xamarin.forms

我正在处理的应用程序有标签,右侧有一个开关。以下是用于实现此目的的XAML示例:

<ViewCell x:Name="ss">
   <StackLayout VerticalOptions="CenterAndExpand" Padding="20,0,20,0">
      <StackLayout Orientation="Horizontal" VerticalOptions="CenterAndExpand">
         <StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="Center">
            <local:LabelBodyRendererClass Text="Show Subcategory" YAlign="Center" XAlign="Center" />
         </StackLayout>
         <StackLayout HorizontalOptions="EndAndExpand" Orientation="Horizontal">
            <Switch x:Name="ssSwitch" Toggled="SsSwitch" VerticalOptions="Center" />
         </StackLayout>
      </StackLayout>
   </StackLayout>
</ViewCell>

我想知道的是,是否有更优化的方法来实现这一目标。设置页面有许多开关设置,似乎有大量的元素。

有没有人有更简单的方法来实现相同的功能,或者我应该坚持使用许多stacklayout元素?

2 个答案:

答案 0 :(得分:2)

您可以使用内置的SwitchCell,但如果您需要/需要为布局执行自定义单元格,则可以使用Grid代替StackLayout。它更有效,并且更容易定义布局。

<ViewCell x:Name="ss">
    <Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <local:LabelBodyRendererClass  HorizontalOptions="StartAndExpand" Text="Show Subcategory" YAlign="Center" XAlign="Center" />
        <Switch x:Name="ssSwitch" Grid.Column="1" Toggled="SsSwitch" VerticalOptions="Center" HorizontalOptions="End" />
    </Grid>
</ViewCell>

使用您的示例:您将拥有一个2列的1行网格。第一列将是您的自定义控件LabelBodyRendererClass,第二列将是您的开关。

请注意,您可以在UI控件中应用“水平”和“垂直”选项。

有关Grid

的更多信息

<强> UDPATE

当然,您可以像使用其他任何单元格一样使用XAML中的SwitchCell

<SwitchCell x:Name="SS" Text="{Binding Setting1Text}" On="{Binding Setting1}" />
<SwitchCell Text="{Binding Setting2Text}" On="{Binding Setting2}" />
<SwitchCell Text="{Binding Setting3Text}" On="{Binding Setting3}" />
<SwitchCell Text="{Binding Setting4Text}" On="{Binding Setting4}" />

这些示例正在使用绑定,但作为您的CustomCell,您可以使用该名称从后面的代码中获取和设置值,但我建议您使用绑定。

希望这会有所帮助.-

答案 1 :(得分:0)

我猜你正在寻找的是: SwitchCell

看看here