我需要一些方法来查找其ID的View / object.我听说过FindViewById函数,但它在我的ContentPage类中不存在.我在哪里可以找到它?
上下文:我有里面带按钮的ListView.我不知道有多少按钮.当用户点击其中一个按钮时,我会获得其ID和全局存储.我想要完成的是找到这个特定的按钮,其id存储在变量中.
<StackLayout x:Name="chooseObjectButtons">
<ListView x:Name="SlotsList" ItemsSource="{Binding .}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout>
<Button Text="{Binding Text}" BackgroundColor="Gray" Clicked="SlotChosen" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
最佳答案 将XAML更改为:
<ListView ItemsSource="{Binding Slots}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout>
<Button Text="{Binding Title}" BackgroundColor="Gray" Clicked="Handle_Clicked" Command="{Binding Select}" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
处理点击:
private Button LastButtonClicked;
void Handle_Clicked(object sender, System.EventArgs e)
{
if (LastButtonClicked != null)
{
// Change background here
}
LastButtonClicked = (Button)sender;
// Do stuff here.
}
要处理每个按钮的特定命令,请使用:
public List<SlotsButtons> Slots
{
get
{
return new List<SlotsButtons>
{
new SlotsButtons
{
Title = "T1",
Select = new Command(()=>{
// do stuff here when clicked.
})
},
new SlotsButtons
{
Title = "T2",
Select = new Command(()=>{
// do stuff here when clicked.
})
}
};
}
}
注意:最初的问题答案.
在Xamarin Forms中,ContentPage类是Partial类.
一部分是从XAML自动生成的,另一部分代表后面的代码.
XAML生成的Partial类具有按名称查找视图的代码.
正确的名称是FindByName,您不需要在分部类中使用它,因为它已经在生成的分部类中生成.
如果要在代码中访问视图,只需在XAML中为其命名即可.
有一个XAML示例:
<Button x:Name="button" ></Button>
在您的代码背后,您可以执行以下操作:
button.BorderWidth = 3;
如果由于某种原因仍需要查找视图,请执行以下操作:
var button = this.FindByName<Button>("button");