我想在我的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>
答案 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}" />