Существует много разных способов, каждый из которых может иметь другое преимущество, основанное на том, что вам нужно.
Attached свойство, которое имеет другое значение по умолчанию, условно скомпилирован, с пунктом стилей/шаблонов, которые выглядят для этого свойства
значение конвертер, который принимает платформу во внимание для своей продукции
несколько XAML, загруженных в код
совершенно разные страницы платформы, которые повторно используют элементы управления внутри платформ
реализовать эквивалент OnIdiom Xamarin, который, вероятно, является лучшим способом. Я дополненный свою собственную реализацию с OnIdiomExtension: IMarkupExtension так что я могу использовать его внутри атрибутов без необходимости разбивать их как отдельные элементы
Я уверен, что этот список может продолжаться, всегда есть 10 способов сделать то же самое в WPF - 9 неправильно, 1 право и 1 Недокументированные, что обычно лучше :)
редактировать: OnIdiom детали
по существу OnIdiom общий конструкт, который выбирает один из 3-х элементов - OnTablet, OnPhone и OnDesktop - каждый из его общих тип. Вы также можете отказаться для необщего версии, которая просто использует UIElement для его элементов
Вот несколько примеров, как это используется в XAML
<RowDefinition.Height>
<OnIdiom x:TypeArguments="GridLength" Phone="1.25*" Tablet="1.35*" />
</RowDefinition.Height>
<OnIdiom x:TypeArguments="View">
<OnIdiom.Phone>
<local:BuildingAreasView/>
</OnIdiom.Phone>
<OnIdiom.Tablet>
<Grid x:Name="gridRoot">....</Grid>
</OnIdiom.Tablet>
</OnIdiom>
и расширение разметки, используемый в XAML:
Вот некоторые примеры кода из OnIdiomExtension.cs, очевидно, не хватает свойства планшетных и настольных ПК для краткости
[ContentProperty ("Default")]
public class OnIdiomExtension : IMarkupExtension
{
public object Default { get; set; }
public object Phone { get; set; }
public object ProvideValue (IServiceProvider serviceProvider)
{
object val = Default;
switch (Device.Idiom) {
case TargetIdiom.Phone:
val = Phone ?? Default;
break;
}
return val;
}
}
Я никогда раньше не видел вещи Xamari, так как я не программировал iOS. У вас есть ссылки на примеры его использования? В этой документации на самом деле ничего не сказано, чтобы объяснить, как она используется. –
см. Обновление, вы должны иметь возможность реализовать код позади OnIdiom –
ОК, я вижу, как это работает, хотя у меня есть один вопрос. В реализации 'IMarkUpExtension' вы указали, откуда появился объект« Устройство »? –