Xamarin无法访问代码背后的控件

时间:2015-01-03 10:47:54

标签: c# .net xamarin code-behind xamarin.forms

对于我的Xamarin表单项目(最新版本1.3),当我在Xamarin Studio(最新版本,5.5.4)中创建视图时,我将视图定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FormsDemo.Register">
    <ContentPage.Content>

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Label Grid.Row="0" Grid.Column="0" Text="First Name" />
            <Entry x:Name="FirstName" Grid.Row="0" Grid.Column="1" />

            <Label Grid.Row="1" Grid.Column="0" Text="Last Name" />
            <Entry x:Name="LastName" Grid.Row="1" Grid.Column="1" />

            <Label Grid.Row="2" Grid.Column="0" Text="Email" />
            <Entry x:Name="Email" Grid.Row="2" Grid.Column="1" />

            <Button x:Name="SaveButton" Grid.Row="3" Grid.Column="0" Text="Login" />
        </Grid>

    </ContentPage.Content>
</ContentPage>

但是,在我的代码隐藏中,根本没有找到任何对名称控件的引用。以下代码是错误的(注释注释):

using System;
using System.Collections.Generic;
using Xamarin.Forms;

namespace FormsDemo
{   
    public partial class Register : ContentPage
    {   
        public Register ()
        {
            InitializeComponent ();

            //Using this approach worked, but is not ideal
            this.FindByName<Button>("SaveButton").Clicked += Save_Clicked;
        }

        void Save_Clicked (object sender, EventArgs e)
        {
            this.FirstName.Text = "A";
            this.LastName.Text= "B";
        }
    }
}

奇怪的是,我收到警告:

  

警告:已分配私有字段“FormsDemo.Register.FirstName”   但它的值从未使用过(FormsDemo.Solution)

我为每个领域拿一个。为什么这不起作用?我如何让intellisense工作?

4 个答案:

答案 0 :(得分:1)

最新的更新似乎解决了这个问题;这些引用工作正常:

this.FirstName.Text = "A";
this.LastName.Text= "B";

看来一些设计师的问题已经解决了。

答案 1 :(得分:0)

我有类似的问题,在我的情况下,这是我自己做的,在xaml文件中,我设置了内容属性x:Class,其值不正确。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="**{namespace.classname}**">

正确指定类名解决了我的问题。

答案 2 :(得分:0)

在我重命名了一些文件并手动更正了Class引用后,我遇到了同样的问题。不知何故VS无法从xaml页面找到引用。 当我创建带有代码的新xaml文件时,相同的代码工作。

答案 3 :(得分:0)

你可以试试这个

var asdf = this.FindByName<TimePicker>("tagName");

这里有建议

https://forums.xamarin.com/discussion/25409/problem-with-xaml-x-name-and-access-from-code-behind

来自该链接的

DIRECT ANSWER

在页面属性上,检查是否设置了以下属性:

BuildAction =嵌入式资源 CustomTool = MSBuild:UpdateDesignTimeXaml

如果没关系,请删除obj&amp; bin文件夹正在重建PCL。

如果您将XAML页面导入PCL,例如属性会发生变化而无法编译。