【问题标题】:How to create Intellisense compatible enum on custom bindable property如何在自定义可绑定属性上创建 Intellisense 兼容枚举
【发布时间】:2019-06-07 20:26:24
【问题描述】:

作为示例,我将引用 Xamarin Forms 中的 Label 控件。它有一个名为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=""

它为您提供了一些可供选择的选项(见下图),但它实际上同时接受枚举值和双精度值。

我认为是 [TypeConverter(typeof (FontSizeConverter))] 使这成为可能,但是当我创建自己的具有相同属性的自定义属性时,它并没有成功。

所以我想要的是拥有一个 double、int、string 或其他类型的自定义属性,但显示几个来自枚举的预定义选项,这些选项将由类型转换器处理。

编辑:我的自定义 TypeConverter 工作正常,但问题是:

  1. XAML 上没有 Intellisense
  2. 它在 XAML Invalid value for property 'FontSize': 'XXSmall' 上给出错误,但它仍然可以编译和工作

【问题讨论】:

    标签: c# visual-studio xaml xamarin.forms


    【解决方案1】:

    让它为 FontSize 工作比在主项目中添加一个 TypeConverter 需要更多的工作。

    Forms 为构建该列表的设计者提供了一个特定的 DLL,以便它可以显示所有可用的命名字体大小,但也不会引发错误

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

    然后将 DLL 的 Forms 打包到所有不同目标的 nuget 包的 Design 目录中https://github.com/xamarin/Xamarin.Forms/blob/master/.nuspec/Xamarin.Forms.nuspec#L137

    Forms 也使用 Visual 做类似的事情,以便它也可以显示智能感知中的内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2020-04-09
      • 2017-05-07
      • 2011-07-03
      相关资源
      最近更新 更多