访问以几何方式生成的UI元素属性

时间:2019-04-20 16:05:55

标签: c# android forms xamarin

现在,我的目标是根据最终应用程序中稍后传入的动态值生成许多开关,这些值稍后可能还会更改。

我写了一个小片段来测试。在这里尝试了CustomSwitch类,该类具有一些用于命名的额外属性,然后根据列表中的条目数以编程方式添加开关。

问题是,稍后,我将无法跟踪实现该开关的“切换属性”状态,因为我无法动态添加不同的变量名(或者可以i?)到动态生成的交换机。

public MainPage()
    {
        InitializeComponent();

        List<testObject> testList = new List<testObject>()
        {
            new testObject {testName = "a", testNumber = 1 },
            new testObject {testName = "b", testNumber = 2 },
            new testObject {testName = "c", testNumber = 3 },
            new testObject {testName = "d", testNumber = 4 },
            new testObject {testName = "e", testNumber = 5 }
        };

        int uiCounter = 1;

        foreach(var test in testList)
        {                
            StackUI.Children.Add(new CustomSwitch { SwitchPropertyName = test.testName });
            StackUI.Children.Add(new Label { Text = test.testName + uiCounter });
            uiCounter++;
        }


    }      

现在最好的方法是什么,同时仍然能够精确地访问切换状态并使用它呢?

2 个答案:

答案 0 :(得分:0)

我认为使用switch.Toggled事件可以实现这一目标。

private void switch_Toggled(object sender, ToggledEventArgs e)
        {
            var switch = (sender as CustomSwitch )?.SwitchPropertyName ;
        }

然后您可以知道哪个开关已更改。

答案 1 :(得分:0)

我知道这有点麻烦,但是您可以使用属性StyleIdStyleClass(据我所知,几乎可以在每个UI元素上设置该属性),然后循环遍历您的布局或将开关添加到列表,然后遍历该列表并搜索StyleId。 很简单,您可以使用Linq查找正确的Switch元素。