问题描述
我想在代码中构建布局,并使用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();
}
});