首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin Forms上的FindViewById?

Xamarin Forms上的FindViewById?
EN

Stack Overflow用户
提问于 2016-06-11 01:26:19
回答 1查看 14.2K关注 0票数 8

我需要一些方法来根据它的ID找到视图/对象。我听说过FindViewById函数,但它不在我的ContentPage类中。我在哪里可以找到它?

上下文:我有一个内部有按钮的ListView。我不知道有多少个按钮。当用户单击其中一个按钮时,我会获得它的ID并全局存储。我想要完成的是找到这个特定的按钮,它的id存储在变量中。

代码语言:javascript
运行
复制
<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>
EN

Stack Overflow用户

回答已采纳

发布于 2016-06-11 01:32:57

将XAML更改为:

代码语言:javascript
运行
复制
<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>  

手柄点击:

代码语言:javascript
运行
复制
private Button LastButtonClicked;

void Handle_Clicked(object sender, System.EventArgs e)
{
    if (LastButtonClicked != null)
    {
        // Change background here
    }    
    LastButtonClicked = (Button)sender;
    // Do stuff here.
}

要处理每个按钮的特定命令,请使用:

代码语言:javascript
运行
复制
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示例:

代码语言:javascript
运行
复制
<Button x:Name="button" ></Button>

在你的代码中,你可以这样做:

代码语言:javascript
运行
复制
button.BorderWidth = 3;

如果出于某种原因,您仍然需要查找视图,请执行以下操作:

代码语言:javascript
运行
复制
var button = this.FindByName<Button>("button");
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37754011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档