#c# #.net #xaml #uwp
#c# #.net #xaml #uwp
Вопрос:
Я создаю анализатор XAML, и для взаимодействия с классами UWP мне нужно сгенерировать DataTemplate
код из кода.
Я видел, что у DataTemplate
класса есть LoadContent()
метод, но как я могу его использовать? Есть ли способ указать, какой контент должен быть загружен?
Кстати, я попытался реализовать IDataTemplate
интерфейс, но поскольку он внутренний, мне пришлось извлекать из DataTemplate
.
Ответ №1:
Я видел, что класс DataTemplate имеет метод LoadContent(), но как я могу его использовать? Есть ли способ указать, какой контент должен быть загружен?
Вы можете обратиться к DataTemplate .Метод LoadContent в этом документе есть пример кода, показывающий, как использовать LoadContent
метод для изменения внешнего вида границы во время выполнения. Это метод, позволяющий указать, какой контент должен быть загружен.
Я понимаю, что вы можете захотеть создать целое DataTemplate
в коде, использующем синтаксический анализатор XAML, но не загружать тот, который существует в Resources
, тогда вы можете закодировать, например, так:
StringReader reader = new StringReader(
@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
<Ellipse Width=""300.5"" Height=""200"" Fill=""Red""/>
</DataTemplate>");
var template = XamlReader.Load(await reader.ReadToEndAsync());
ListView lv = new ListView();
lv.ItemTemplate = template as DataTemplate;
ObservableCollection<int> coll = new ObservableCollection<int>();
for (int i = 0; i < 20; i )
{
coll.Add(i);
}
lv.ItemsSource = coll;
rootGrid.Children.Add(lv);
Здесь я проанализировал a DataTemplate
из строки с помощью XamlReader и применил это DataTemplate
как значение ItemTemplate
a ListView
.
Комментарии:
1. Спасибо, Грейс! Это нормально для 99% разработчиков. Для меня это не так долго, как я хочу, чтобы мой собственный анализатор XAML создавал шаблон данных с нуля. Что мне нужно, так это самому создать DataTemplate. Я не использую XamlReader, но мой OmniXAML (v2), который является кроссплатформенным. Я нахожу проблемы с UWP и с WPF, потому что они скрывают так много, что практически невозможно контролировать весь процесс создания шаблонов.
2. @SuperJMN, да, вы правы, я думаю, что это невозможно и в UWP. Возможно ли использовать собственный метод для каждой отдельной платформы, как в xamarin? В xamarin он используется
DependencyService
для соответствия каждой платформе. Прошу прощения, здесь я ничем не смог помочь.3. Нет, я боюсь, что это не так. Хотя это возможно, у моего анализатора должна быть альтернатива: читать и раздувать модель без использования какого-либо другого анализатора. Использование другого синтаксического анализатора для раздувания DataTemplate нарушает весь его смысл : (