UWP "Тип" Зависимость

63
5

Я пытался создать поведение в UWP, хотел бы иметь свойство зависимостей "Тип TargetType", как показано ниже. Намерение было использовать Type так, чтобы редактор XAML мог распознать его и автоматически заполнить/импортировать пространство имен типа Style.TargetType.

Но как только я запускаю программу, я получил крах.

Использование StringToTypeConverter потеряло возможности автозаполнения в редакторе xaml.

Итак, как я могу это сделать, например Style?

Свойство зависимости

public static readonly DependencyProperty TargetTypeProperty = DependencyProperty.Register(nameof(TargetType), typeof(Type), typeof(LazyIWorkVmBehavior), new PropertyMetadata(null));

public Type TargetType
{
get { return (Type) GetValue(TargetTypeProperty); }
set { SetValue(TargetTypeProperty, value);}
}

Применение:

<mvvmLazyControl:LazyIWorkVmBehavior TargetType="viewModel:WorkVm2" />

Ошибка msg: Информация WinRT: Не удалось создать "MvvmLazyControl.LazyIWorkVmBehavior" из текста "viewModel: WorkVm2". [Линия: 42 Позиция: 46]

Проект: https://github.com/sharethl/UWPTargetTypeDependencyTest

спросил(а) 2021-01-25T15:36:04+03:00 4 месяца, 2 недели назад
1
Решение
119

Так как я не знаю, как вы определили Type объект viewModel:WorkVm2, я просто попробовал ваше свойство зависимостей успешно на моей стороне с помощью кода следующим образом:

<local:LazyIWorkVmBehavior TargetType="local:Withinstyle" />
<local:LazyIWorkVmBehavior TargetType="Button" />
<local:LazyIWorkVmBehavior TargetType="local:Secondpage" />

Withinstyle - это настраиваемый элемент управления в моем проекте, Secondpage - это страница xaml в моем проекте. Оба они могут успешно работать в моем проекте. Я могу воспроизвести ваше исключение, установив объект TargetType с неправильным префиксом или без префикса. Поэтому, пожалуйста, подтвердите, что вы включили префикс viewModel xmlns viewModel для настраиваемого типа WorkVm2 и убедитесь, что WorkVm2 существует в пространстве имен viewModel.

Другое дело, согласно статье свойств Style.TargetType:

Типичным способом задания значения TargetType является атрибут XAML в элементе Style. Когда задано в XAML, значение TargetType и значения, которые вы предоставляете, принимают некоторые аспекты того, как типы представлены в XAML.

Хотя это для элемента Style, но для вашего пользовательского LazyIWorkVmBehavior, на мой взгляд, пользовательский TargetType также должен быть представлен в XAML.

ответил(а) 2021-01-25T15:36:04+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема