如何在Xamarin中为VisualElement设置名称?

问题描述

我想在代码中构建布局,并使用FindByName查找VisualElement。

public StackLayout CreateView() {
    StackLayout stackLayout = new StackLayout();
    foreach(Label label in Enumerable.Range(1,100).Select(x => {
        Label label = new Label();
        //label.Name = "Test" + x; // how to set the name here?
        return label;
    })) {
        stackLayout.Children.Add(label);
    }
    return (stackLayout);
}
public Label GetLabel(StackLayout stackLayout,string name) {
    return (Label)stackLayout.FindByName(name);
}

如何在代码中设置此名称?请帮助我!

解决方法

最后我找到了解决方案。

1,添加一个实现接口“ Xamarin.Forms.Internals.INameScope”的类“ NameScope1”

2,新建一个NameScope1的实例“ ns” => ns.RegisterName(“ Test” + x,label);

3,将所有视图设置为相同的NameScope => NameScope.SetNameScope(label,ns);

4,寄存器名称=> ns.RegisterName(“测试” + x,标签);

完整代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button[][] buttons = new Button[3][3];
    private boolean player1Turn = true;
    private int roundCount;
    private int player1Points;
    private int player2Points;
    private TextView textViewPlayer1;
    private TextView textViewPlayer2;
    MediaPlayer mp;
    Context context = this;
    Button button_00;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_00 = (Button) findViewById(R.id.button_00);
        final MediaPlayer mp = MediaPlayer.create(this,R.raw.sample);
        button_00.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();

            }
            
        });