簡體   English   中英

如何在自定義可綁定屬性上創建與Intellisense兼容的枚舉

[英]How to create Intellisense compatible enum on custom bindable property

例如,我將引用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. 它在Invalid value for property 'FontSize': 'XXSmall' XAML Invalid value for property 'FontSize': 'XXSmall'上給出錯誤,但仍可編譯並正常工作

要使它適用於FontSize,要比將TypeConverter添加到主項目還要多一些工作。

Forms向設計器提供了一個特定的DLL,該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

表單在Visual中也做類似的事情,因此它也可以在智能感知中顯示它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM