Как создать перечисление, совместимое с Intellisense, для настраиваемого привязываемого свойства - PullRequest
0 голосов
/ 07 июня 2019

В качестве примера я буду ссылаться на элемент управления Label из форм Xamarin.У него есть свойство, называемое FontSize, и оно имеет тип double.

/// <summary>Gets the size of the font for the label.</summary>
/// <value>To be added.</value>
/// <remarks>To be added.</remarks>
[TypeConverter(typeof (FontSizeConverter))]
public double FontSize
{
  get
  {
    return (double) this.GetValue(Label.FontSizeProperty);
  }
  set
  {
    this.SetValue(Label.FontSizeProperty, (object) value);
  }
}

, хотя оно должно позволять вам только удваивать значение, когда вы пишете

<Label FontSize=""

, оно дает вам несколько вариантоввыбрать из (см. изображение ниже), но на самом деле он принимает и значение enum, и double.

enter image description here

Я думал, что это [TypeConverter(typeof (FontSizeConverter))], который сделал этовозможно, но когда я создал свое собственное настраиваемое свойство с тем же атрибутом, это не сработало.

Так что я хочу, чтобы иметь настраиваемое свойство типа double, int, string или что угодно, но показывать несколько предопределенных параметровиз enum, который будет обрабатываться преобразователем типов.

РЕДАКТИРОВАТЬ: Мой пользовательский TypeConverter работает нормально, но проблема в том, что:

  1. Он не имеет Intellisense на XAML
  2. выдает ошибку на XAML Invalid value for property 'FontSize': 'XXSmall', но все равно компилируется и работает

1 Ответ

2 голосов
/ 08 июня 2019

Работа с FontSize - это немного больше, чем просто добавление TypeConverter в основной проект.

Forms предоставляет определенную библиотеку DLL разработчику, который создает этот список, чтобы он мог отображать все доступные именованные размеры шрифта, но также не выдавать ошибку

https://github.com/xamarin/Xamarin.Forms/blob/55937add669a422d5974fcb057c193d64f7a3a05/Xamarin.Forms.Core.Design/AttributeTableBuilder.cs#L31

И затем формирует пакеты, которые DLL, в каталог Design пакетов nuget для всех различных целей https://github.com/xamarin/Xamarin.Forms/blob/master/.nuspec/Xamarin.Forms.nuspec#L137

Forms также делает то же самое с Visual, так что он может отображать и те, которые находятся в intellisense

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...