2014-09-02 4 views
0

Возможно ли иметь более одного макета для окна WPF?Несколько макетов в WPF

То есть, скажем, у меня есть приложение, которое можно запускать на планшете или на более традиционном рабочем столе или ноутбуке. Таблица может иметь гораздо более высокое разрешение экрана, чем ноутбук или рабочий стол, но из-за меньшего размера физического экрана может быть лучше выложить элементы управления по-разному на планшет.

Если это возможно, как вы это делаете?

ответ

0

Существует много разных способов, каждый из которых может иметь другое преимущество, основанное на том, что вам нужно.

  • 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; 
    } 
} 
+0

Я никогда раньше не видел вещи Xamari, так как я не программировал iOS. У вас есть ссылки на примеры его использования? В этой документации на самом деле ничего не сказано, чтобы объяснить, как она используется. –

+0

см. Обновление, вы должны иметь возможность реализовать код позади OnIdiom –

+0

ОК, я вижу, как это работает, хотя у меня есть один вопрос. В реализации 'IMarkUpExtension' вы указали, откуда появился объект« Устройство »? –

Смежные вопросы