如何在Xamarin Shell MenuItem中添加开关

时间:2019-06-26 16:44:56

标签: xamarin.forms

我想在我的AppShell.xaml的menuItem中进行切换(除了通常的文本和图标)。在保留MenuItem样式的同时如何做?

我在MenuItem的Shell.MenuItemTemplate中使用了一个DataTemplate,但结果却很丑陋,因为所有MenuItem的样式都丢失了。用这种方法创建的MenuItem与外壳程序的其他FlyoutItems和MenuItems具有不同的字体,文本颜色和字体大小。

<MenuItem Text="MyMenuItem" Command="{Binding SwitchMode}">
    <Shell.MenuItemTemplate>
        <DataTemplate>
            <StackLayout Orientation="Horizontal" HorizontalOptions="Center">
                <Label Text="{Binding Text}"/>
                <Switch IsToggled="{Binding IsModeActivated}"/>
            </StackLayout>
        </DataTemplate>
    </Shell.MenuItemTemplate>

1 个答案:

答案 0 :(得分:0)

参考Shell.MenuItemTemplate中定义的DataTemplate使用元素Resources

公用/共享元素的属性值可以在"BaseStyle"中定义,而菜单特定的属性可以根据"BaseStyle"以样式定义:

<Shell.Resources>
  ...
  <Style x:Key="labelBaseStyle" TargetType="Label">
    <Setter Property="VerticalTextAlignment" Value="Center" />
  </Style>

  <Style x:Key="firstMenuLabelStyle" TargetType="Label" BasedOn="{StaticResource labelBaseStyle}">
    <Setter Property="FontAttributes" Value="Italic" />
  </Style>

  <Style x:Key="menuLabelStyle" TargetType="Label" BasedOn="{StaticResource labelBaseStyle}">
    <Setter Property="FontAttributes" Value="Bold" />
  </Style>

  <DataTemplate x:Key="firstMenuItemTemplate">
    <StackLayout ...
      <Label Style="{StaticResource firstMenuLabelStyle}" ...
  </DataTemplate>

  <DataTemplate x:Key="menuItemTemplate">
    <StackLayout ...
      <Label Style="{StaticResource menuLabelStyle}" ...
  </DataTemplate>
  ...
</Shell.Resources>
...
<MenuItem Text="MenuItem1" Shell.MenuItemTemplate="{StaticResource firstMenuItemTemplate}" />

<MenuItem Text="MenuItem2" Shell.MenuItemTemplate="{StaticResource menuItemTemplate}" />