Изменить:Во избежание путаницы :Речь идет о столе, который ранее назывался или до сих пор называется 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 -, насколько я могу судить ).
Как инженер-программист, я до сих пор не могу согласиться со стратегией написания одних и тех же фрагментов графического интерфейса (, состоящих в основном из одних и тех же элементов управления в одном и том же макете с одинаковым поведением по отношению к модели данных )с использованием одного и того же языка программирования дважды. Это просто кажется неправильным.
Итак, три возможных решения, которые я нашел до сих пор:
Surface*
.В настоящее время я склоняюсь к третьему варианту, поскольку он просто кажется приемлемой платой за независимость от платформы -. Тем не менее, я думаю, что поскольку WPF является связующим элементом между настольным компьютером и графическим интерфейсом PixelSense, это должно быть частой проблемой, и мне интересно, не было ли это решено раньше. Вот и спрашиваю здесь:Как это обычно делается?
P.S. :Ориентация не имеет значения. Вышеупомянутые фрагменты графического интерфейса отображаются во вращающихся элементах ScatterViewItem на PixelSense и в их обычной вертикальной ориентации на настольных компьютерах.