将自定义属性添加到所有View控件

时间:2018-11-20 07:17:20

标签: c# xamarin xamarin.forms

如何添加自定义属性,例如:

Public string Reason = "It does not matter why I need this";

要显示所有视图元素(按钮,图像,标签等),而不是创建单独的继承每个控件的类?

最好添加到:

public class View : VisualElement

但是不修改Xamarin类怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用扩展方法

public static class ViewExtensions
{
    // Enables compilers to dynamically attach object fields to managed objects.
    // https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.conditionalweaktable-2?view=xamarinandroid-7.1
    static readonly ConditionalWeakTable<View, ViewFieldsObject> ViewFields = new ConditionalWeakTable<View, ViewFieldsObject>();

    public static string GetPerson(this View view) { return ViewFields.GetOrCreateValue(view).Person; }

    public static void SetPerson(this View view, string person) { ViewFields.GetOrCreateValue(view).Person = person; }

    public class ViewFieldsObject
    {
        public string Person { get; set; }
    }
}

您可以将 View 替换为所需的任何类。

答案 1 :(得分:0)

这是不可能的,您需要为每个控件创建自定义类。

唯一可能的方法是从Github下载Xamarin.Forms代码并将属性添加到VisualElement,它可能会起作用,但是比将属性添加到要使用的任何控件上要复杂得多(您必须只要您想将Xamarin.Forms更新到新版本,就可以执行此操作。