Условные обозначения для приложений WPF, которые работают как на рабочем столе, так и на поверхности (PixelSense )1.0

Изменить:Во избежание путаницы :Речь идет о столе, который ранее назывался или до сих пор называется Microsoft Surface 1.0 . Речь идет не о столе, который раньше назывался Microsoft Surface 2.0 , и не о планшетном компьютере, который сейчас называется Microsoft Surface . Конец редактирования

Я пишу приложение WPF, которое должно работать как на настольных системах, так и на MS Surface/PixelSense 1.0. Я ищу соглашения о том, как это обычно делается.

Я знаю, что существуют некоторые различия между платформами, поэтому основные скелеты графического интерфейса для настольных компьютеров и версии PixelSense различаются (, в данном случае Canvasв настольной версии и ScatterViewв PixelSense. version как корневой элемент GUI ).

Однако в настольной версии есть много пользовательских элементов управления/фрагментов графического интерфейса на основе WPF -, которые должны выглядеть примерно так же в версии PixelSense.

К сожалению, стандартные элементы управления WPF не работают в PixelSense. Элементы управления, такие как CheckBox, должны быть заменены на SurfaceCheckBox, чтобы реагировать на действия пользователя, что легко проверить с помощью этого небольшого примера кода на PixelSense:

var item = new ScatterViewItem();
var sp = new StackPanel();
item.Content = sp;
item.Padding = new Thickness(20);
sp.Children.Add(new CheckBox() { Content = "CheckBox" });
sp.Children.Add(new SurfaceCheckBox() { Content = "SurfaceCheckBox" });
myScatterView.Items.Add(item);

По-видимому, это означает, что пользовательские элементы управления WPF не могут отображаться на PixelSense без каких-либо изменений, что подтверждается утверждениями в таких ресурсах, как документация Microsoft по уровню представления PixelSense , которая вызывает вопросы SO , такие как этот один, связанный с древовидным представлением WPF , также относится к,этот пост в блоге о слое PixelSense WPF или этот SO-вопрос о том, как переписать настольное приложение WPF для PixelSense . Последняя страница даже называет требуемые изменения минимальными , но тем не менее они являются изменениями.

Кроме того, ответы на этот вопрос SO о том, как использовать определенный элемент управления рабочего стола WPF в PixelSense , подразумевают, что использование.NET 4.0 может упростить ситуацию, но я не думаю, что.NET 4.0 поддерживается PixelSense . ] 1.0 SDK (это.NET 3.5 -, насколько я могу судить ).

Как инженер-программист, я до сих пор не могу согласиться со стратегией написания одних и тех же фрагментов графического интерфейса (, состоящих в основном из одних и тех же элементов управления в одном и том же макете с одинаковым поведением по отношению к модели данных )с использованием одного и того же языка программирования дважды. Это просто кажется неправильным.

Итак, три возможных решения, которые я нашел до сих пор:

  • Напишите фрагменты графического интерфейса для стандартного WPF. Затем скопируйте библиотеки, содержащие эти фрагменты графического интерфейса, с помощью сценариев, преобразовав при этом все соответствующие файлы Xaml (, например. с XSLT )таким образом, чтобы заменить стандартные элементы управления WPF их аналогами Surface*.
    Недостатки:
    • Требуется повышенное обслуживание, чтобы скрипты всегда работали и запускались всякий раз, когда что-то менялось в проектах WPF.
    • Кроме того, определение того, какие файлы Xaml следует учитывать и какие элементы управления следует заменить теми, (что, по мнению (, дополнительными сторонними -элементами управления PixelSense... ), может оказаться сложным.
    • Наконец, сгенерированный проект PixelSense -будет точной копией проекта WPF, за исключением файлов Xaml, поэтому нельзя вводить код, специфичный для PixelSense -(, или, если это возможно, это сделает сценарии для создание еще более сложных проектов PixelSense ).
  • Ориентируйтесь только на PixelSense/Surface и попросите пользователей настольных компьютеров установить Surface SDK.Спасибо пользователю Clemens за предложение!
    Недостатки:
    • Пользователи должны установить Surface 1.0 SDK , который -в текущих системах -не является -тривиальной операцией :для запуска Surface 1.0 SDK . на машине с 64-разрядной версией Windows 7 необходимо выполнить различные действия, такие как исправление файлов MSI .
    • Симулятор PixelSense/Surface 1.0 — единственная возможность запуска приложений Surface 1.0 на настольном компьютере. Этот симулятор не очень удобен в использовании и в некоторых системах содержит ошибки :На моем компьютере он выглядит так:buggy Surface 1.0 simulator(Вывод покрывает только 3/4 окна симулятора, но ввод регистрируется во всем окне. то есть, чтобы щелкнуть в правом нижнем углу имитации поверхности, я должен щелкнуть (явно прозрачный )нижний правый угол окна симулятора.)
  • При создании графического интерфейса вместо явного использования стандартных классов элементов управления WPF или PixelSense используйте специфичную для платформы -фабрику, которая создает соответствующий тип элемента управления.
    Недостатки:
    • Фрагменты GUI больше нельзя записывать с помощью Xaml; по крайней мере, большинство элементов управления и все их привязки должны быть созданы в коде C #.

В настоящее время я склоняюсь к третьему варианту, поскольку он просто кажется приемлемой платой за независимость от платформы -. Тем не менее, я думаю, что поскольку WPF является связующим элементом между настольным компьютером и графическим интерфейсом PixelSense, это должно быть частой проблемой, и мне интересно, не было ли это решено раньше. Вот и спрашиваю здесь:Как это обычно делается?

P.S. :Ориентация не имеет значения. Вышеупомянутые фрагменты графического интерфейса отображаются во вращающихся элементах ScatterViewItem на PixelSense и в их обычной вертикальной ориентации на настольных компьютерах.

8
задан Community 23 May 2017 в 10:32
поделиться