Xamarin表单ContextAction MenuItem文本颜色

时间:2017-04-28 00:18:25

标签: xamarin xamarin.ios xamarin.forms

我已按照以下说明创建了一个带有上下文操作的ListView-developer.xamarin.com/guides/xamarin-forms/user-interface/listview/interactivity/#Context_Actions

这是XAML

<ListView x:Name="ContextDemoList" ItemsSource="{Binding Notes}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.ContextActions>
                    <MenuItem Clicked="OnMore" CommandParameter="{Binding .}" Text="More" />
                    <MenuItem Clicked="OnDelete" CommandParameter="{Binding .}" Text="Delete" IsDestructive="True" />
                </ViewCell.ContextActions>
                <StackLayout Padding="15,5">
                    <Label Text="{Binding Subject}" />
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这让我的上下文操作很好,但在iOS中按钮获得绿色文本。 iOS simulator screen cap。当我部署到物理设备时,会看到相同的结果。

我发现了这篇文章https://forums.xamarin.com/discussion/34713/how-to-change-the-menuitem-colors-of-viewlist-in-ios-viewcellrenderer,其中概述了自定义MenuItem背景颜色的可能解决方案,包括自定义渲染,反射或插件,其中不利用本机元素。但我更愿意通过跨平台获得原生经验。

有谁知道绿色文字的来源?或者,如果Xamarin已经提出了一种定制方法吗?

1 个答案:

答案 0 :(得分:1)

原来这是部分复制粘贴问题,也是部分iOS预期的功能。

设置UIButton标题颜色也将设置UIMenuItem文本颜色。

namespace Project.iOS
{
    [Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            ...
            // --- offending line of code ---
            UIButton.Appearance.SetTitleColor(UIColor.FromRGB(0, 127, 14), UIControlState.Normal);
            ...
        }
    }
}

有一种解决方案可以为原生iOS应用自定义两种颜色,这些颜色可能会将一些有用的信息转移到Xamarin,Text color in UIMenuController affected by UIButton appearance setting。但我没有尝试这样做。