Xamarin Forms上的FindViewById?
问题描述:
我需要一些方式来查找视图/对象的ID。我听说过FindViewById函数,但它不在我的ContentPage类中。我在哪里可以找到它?Xamarin Forms上的FindViewById?
上下文:我有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中形成类ContentPage
是Partial class
。 一部分从XAML自动生成,另一部分代表后面的代码。 XAML生成的Partial class
具有按名称查找视图的代码。
正确的名字是FindByName,你不需要在你的部分类中使用它,因为它已经在生成的部分类中生成了。
如果你想在你的代码中访问一个视图,只需在XAML中给它一个名字。 有一个XAML例如:
<Button x:Name="button" ></Button>
而且在后面的代码,你可以这样做:
button.BorderWidth = 3;
如果您仍然需要找到某种原因来看,做到这一点:
var button = this.FindByName<Button>("button");
您使用Xaml吗?@ Ludwik11 –
@AkashAmin是的。我正在生成按钮的列表视图。当用户点击按钮我得到它的ID。现在我想用这个保存的ID找到这个按钮。 – Piotrek
在xaml中使用'x:Name',您可以直接在您的后端C#中引用它。 @ Ludwik11 –