Как программно добавить элементы xaml в Visual Studio 2017? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть проект C ++ / winrt со сложным и динамическим интерфейсом xaml, созданным в коде C ++.Теперь я перехожу к последней версии VS 15.9.0 Preview 3, которая поддерживает платформу C ++ / Winrt, а также позволяет использовать конструктор xaml в таком проекте.Но я не хочу использовать дизайнер и отключил его в Tools / Options / Xaml.В результате ни один из моих программных элементов xaml не появляется.Похоже, что проект ожидает от меня ввода этих элементов в кодовую страницу xaml вместо использования C ++, например, Grid (), StackPanel (), view.RowDefinitions.Append (), view.SetRow () и т. Д. Папка GeneratedFiles теперьполный элементов, которые не были представлены в предыдущем проекте, но не могут быть удалены.Можно ли по-прежнему использовать интерфейс C ++ для xaml, и что нужно сделать, чтобы включить его, если это так?Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Райан прав: C ++ / winrt поддерживает программное создание xaml и прекрасно работает.С помощью пары парней из c ++ / winrt из MS я также знаю, почему мой код ничего не делал.В предыдущей версии моего приложения я объявил MainPage как класс C ++, а не как структуру, и назначил начальную сетку для xaml, получив текущее окно и установив currentWindow.Content (theGrid).Но в новом шаблоне приложения MainPage представляет собой структуру, которая может иметь значение, и при настройке window.Content таким образом больше не работает, это делает: this-> Content (theGrid).Оставляя в стороне некоторые не относящиеся к делу вопросы, касающиеся объявлений в BlankApp, я думаю, что это ответ.Программный xaml работает, если вы установите исходное содержимое, как указано выше.

0 голосов
/ 17 октября 2018

К сожалению, это не тот способ использования этой системы пользовательского интерфейса.Системы пользовательского интерфейса на основе XAML являются потомками WPF, который опирается на шаблон Model-View-ViewModel (MVVM).

Этот шаблон предназначен для трех типов классов, составляющих ваше приложение: представления, которые в основном написаны на XAML и имеют дело только с отображением данных, которые им даны;ViewModels, которые являются оберткой и переводчиком для предоставления данных представлений и для команд моделей;и наконец, Модели, которые являются вашими базовыми классами бизнес-логики.

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

Чтобы вернуться к вашей конкретной ситуации, в API библиотеки есть реальные проблемы, которые будут серьезным препятствием для программного определения пользовательского интерфейса в C ++.Вместо этого вы захотите использовать XAML для объявления пользовательского интерфейса.Добавление и удаление определений столбцов сетки не является чем-то, что хорошо поддерживается, но использование StackPanel s и DockPanel s является нормальным способом сделать это.

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

Если у вас есть другие вопросы, которые являются довольно широкими и могут быть слишком широкими для основного сайта, присоединяйтесь к Канал WPF в чате , но имейте в виду, что большинство из нас не имеют опыта работы с WinRT.

...