Почему атрибуты 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>

Есть ли решение использовать другую тему между идиомой телефона и идиомой планшета?

3
flchaux 5 Апр 2017 в 10:00

2 ответа

Лучший ответ

На данном этапе вы не можете сделать это в XAML, однако вы можете обойти это с помощью файла codebehind. Я использую приложение xaml и codebehind для динамического изменения тем. Затем просто выполните стандартное наследование для тем «Телефон» и «Планшет» общих цветов, стилей и т. Д. Только переопределяя то, что необходимо в каждой конкретной теме Iodiom.

< EM> MyApp.xaml

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

< EM> MyApp.xaml.cs

public partial class MyApp : Application
{
    public MyApp()
    {
        InitializeComponent();
        // Toggle appTheme.MergedWith based on Idiom 
        appTheme.MergedWith = Device.Idiom == TargetIdiom.Phone ? typeof(PhoneTheme) : typeof(TabletTheme);
    }
}
3
Steve Davis 5 Апр 2017 в 22:03