在Xamarin中,使用OnIdiom和OnIdiom

时间:2017-04-05 07:00:08

标签: c# xaml xamarin xamarin.forms

为什么MergedWith ResourceDictionary属性不支持OnIdiom功能? 这段代码很好用:

<ResourceDictionary.MergedWith>theme:PhoneTheme</ResourceDictionary.MergedWith>

这个将MergedWith属性设置为null:

<ResourceDictionary.MergedWith>
    <OnIdiom x:TypeArguments="x:String">
        <OnIdiom.Phone>theme:PhoneTheme</OnIdiom.Phone>
        <OnIdiom.Tablet>theme:TabletTheme</OnIdiom.Tablet>
    </OnIdiom>
</ResourceDictionary.MergedWith>

是否有任何解决方案可以在手机成语和平板电脑成语之间使用不同的主题?

2 个答案:

答案 0 :(得分:3)

您现在无法在此阶段在XAML中执行此操作,但您可以使用代码隐藏文件解决此问题。我使用Application xaml和codebehind动态更改主题。然后只需将手机和平板电脑主题的标准继承用于常见的颜色,样式等。只覆盖每个Iodiom特定主题所需的内容。

MyApp.xaml

public UnsupportedContentTypeHandler()
{
    supportedContentTypes = GlobalConfiguration.Configuration.Formatters
                                .SelectMany(f => f.SupportedMediaTypes).ToArray();
}

MyApp.xaml.cs

<Application ...>
    <ResourceDictionary x:Name="appTheme"> <!-- Name the Resource Dict //-->
        ...Any converters, etc
    </ResourceDictionary>
</Application>

答案 1 :(得分:2)

现在不支持,但已coined on the Xamarin Forums

解决方法可能是为手机和平板电脑创建单独的页面,并依赖于成语显示一页或另一页。在该页面上,您可以拥有自己的主题。我想这是你现在能做的最好的事情。