Xamarin.Forms访问代码中用标记编写的控件

时间:2014-10-14 05:58:11

标签: c# android mono xamarin.forms

我试图将一些项添加到Listview中,我在xaml文件中使用Xamarin.Forms标记添加。 可以通过点击事件挂钩来访问该按钮。但由于列表视图为空,我需要像winforms中的ondraw之类的事件,以便在绘制时可以挂钩。

enter image description here

在XAML文件中,我有:

<?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="ButtonXaml.ButtonXamlPage">
             <StackLayout>
  <Button Text="Tap for click count!"
    BorderWidth="10"
    TextColor="Red"
    HorizontalOptions="Center"
          Clicked="OnButtonClicked" />
          <ListView 
          HorizontalOptions="Center"

          />

   </StackLayout>
</ContentPage>

在.cs文件中我有

using System;
using Xamarin.Forms;

namespace ButtonXaml
{
    public partial class ButtonXamlPage
    {
        int count = 0;

        public ButtonXamlPage()
        {
            InitializeComponent();
        }

        public void OnButtonClicked(object sender, EventArgs args)
        {
            ((Button)sender).Text = "You clicked me";
        }
    }
}

所以我应该挂钩Listview中的事件,还是像我们在android中那样做Resource.getElementbyID之类的事情

3 个答案:

答案 0 :(得分:23)

要访问代码隐藏中的Forms控件,您需要使用x:Name属性为其指定名称

在XAML中

<ListView HorizontalOptions="Center" x:Name="MyList" />

代码:

MyList.ItemsSource = myData;

答案 1 :(得分:10)

Xamarin中存在一个错误,其中VS没有看到定义的x:Name http://forums.xamarin.com/discussion/25409/problem-with-xaml-x-name-and-access-from-code-behind

假设你已经在XAML中定义了一个图像:

<Image x:Name="myImageXName" />

然后这应该在代码背后工作:

this.FindByName<Image>("myImageXName");

答案 2 :(得分:2)

在我的情况下,问题是.xaml.cs文件中缺少行XamlCompilation(XamlCompilationOptions.Compile)]

示例:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        BindingContext = new MainPageViewModel();
    }
    ...
}