如何在Xamarin Shell MenuItem中添加开关

问题描述 投票:0回答:1

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

我在MenuItem的Shell.MenuItemTemplate中使用了一个DataTemplate,但结果却很丑陋,因为MenuItem的所有样式都丢失了。以这种方式创建的MenuItem与Shell的其他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>
xamarin.forms
1个回答
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}" />
© www.soinside.com 2019 - 2024. All rights reserved.