web-dev-qa-db-ja.com

コードからマークアップで記述されたコントロールにアクセスするXamarin.Forms

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";
        }
    }
}

したがって、リストビューでイベントにフックする必要がありますか、Androidで行うようにResource.getElementbyIDのようなことを行うことができますか

12
techno

コードビハインドでFormsコントロールにアクセスするには、x:Name属性を使用して名前を割り当てる必要があります。

xAMLの場合:

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

コード内:

MyList.ItemsSource = myData;
23
Jason

Xamarinにバグがあり、VSは定義されたx:Nameを認識しません http://forums.xamarin.com/discussion/25409/problem-with-xaml-x-name-and-access-from -コードビハインド

XAMLで画像を定義したとします。

<Image x:Name="myImageXName" />

次に、これはコードビハインドで機能するはずです:

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

私の場合、問題は.xaml.csファイルにXamlCompilation(XamlCompilationOptions.Compile)]行がないことでした。

例:

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