web-dev-qa-db-ja.com

Xamarin.Forms-新しいページの作成時にInitializeComponentは存在しません

Xamarin.Formsを試すためにVisual Studioを使用しています。私はガイドに従うことを試みています: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/

つまり、PCLを使用してXamarin.Formsソリューションを作成し、Forms XAML PageをPCLプロジェクトに追加しようとします。

作成されるコードビハインドは次のようになります。

    public partial class Page1 : ContentPage
    {
        public Page1()
        {
            InitializeComponent(); 
        }
    }

ここでの問題は、InitializeComponent();が赤であることです。ビルドしようとすると、The name 'InitializeComponent' does not exist in the current context

私は解決策を探していましたが、他の人が同じトラブルを抱えていたとしても、彼らの解決策は私にとってはうまくいきません。ここに私が使用しようとした提案があります: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/

この問題の解決策があれば教えてください。ありがとう!

更新:

私のPCL(XAMLページも追加したい場所)には以下が含まれます。

App.cs:

    public class App : Application
    {
        public App()
        {
            // The root page of your application
            MainPage = new ContentPage
            {
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            XAlign = TextAlignment.Center,
                            Text = "Welcome to Xamarin Forms!"
                        }
                    }
                }
            };
        }

        protected override void OnStart()
        {
            // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }

そして私の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="XamaTest.MyXamlPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

コードビハインド:

    public partial class MyXamlPage : ContentPage
    {
        public MyXamlPage()
        {
            InitializeComponent();
        }
    }
64
user2915962

UPDATE:このエラーは通常VS 2015には表示されません。

解決策を見つけました! .XAMLファイルを右クリックして、Propertiesを選択します。

Custom Toolというプロパティが表示されます。値をMSBuild:CompileからMSBuild:UpdateDesignTimeXamlに変更します

これで問題が解決します。 downvoteについて知らないが、私のスクリーンショットはここにある:

ScreenshotUPDATE:

めったに再現しません。存在する場合は、Xamlを開いてコードビハインドファイルを保存します。私はそれが最善の解決策ではないことを知っていますが、仕事を成し遂げます。

56
Dushyant Bangal

私は時々これを受け取ります、そして、ここにそれらをこれまでに解決したチェックリストがあります:

  1. .xamlと.xaml.csの名前空間が一致することを確認してください

  2. 正しい親から継承-ページの場合はContentPage、コントロールの場合はContentView

  3. 共有プロジェクトの場合は、.xamlファイルのビルドアクションをEmbedded Resourceに設定します。

33
root

私の観察に関する限り、Visual Studio 2015では、XAMLプロパティは、デフォルトで、特に投票の多い回答で示されているように、デフォルトで既に設定されています。

  • カスタムツール= MSBuild:UpdateDesignTimeXaml
  • ビルドアクション= Embedded Resource

しかし、それでもエラーが表示されることがあります...( この他の質問 のように)。

対応するXAMLファイルを編集してからヒット CTRL+S うまくいくはずですが、そうする必要はありません。カスタムツールを強制的に実行するには、XAMLファイルを右クリックして、[カスタムツールの実行]コンテキストメニューをクリックします。

enter image description here

30
har07

この問題に遭遇しました。 VSのXAMLファイルのエンコードに関連付けられています。 VS2015を使用しています。

この問題を次のように解決しました。

  1. プロジェクトで* .xamlファイルを開き、[保存]ボタンをクリックします。 (VS2015では正しいエンコードが適用されます)。

  2. 次に、プロジェクトを再度開き、再構築します。現在、エラーはありません。

12
Roman Himadinov

Xamarin.Forms NuGetパッケージを更新すると、仕事ができるはずです

10
Thomas Weller

これはおそらくあなたのケースではありませんが、私は同様の問題を抱えていて、私はxamlと名前のミスマッチの背後にあるコードでした。たとえば、サンプルによれば、名前空間の背後にあるコードがXamaTest(ほとんどの場合、アプリの名前)でクラスがMyXamlPageと呼ばれる場合、xamlクラス名はXamaTest.MyXamlPage([namespace]。[classname])でなければなりません

コードビハインドで空のxamlを作成した後、私は愚かでした。xamlでクラスの名前を変更すると、このエラーが発生しました。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
             x:Class="XamaTest.MyXamlPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

コードビハインド:

public partial class MyXamlPage : ContentPage
7
batmaci

Xamlページにax:Name = "..."を追加してみてください...他には何も機能しませんでした-しかし、ページ上のいくつかの要素にx:Name属性を追加すると、エラーが消えました(ほとんどの場合-Iそれでも時々それを取得します)。 Xamarin.Formsの最新ビルド(1.5.0.6447)を使用しています...

XAMLは共有プロジェクトでは機能しません-ポータブルプロジェクトでのみ機能します...

4
Kim Rasmussen

Xamarin.FormsページでInitializeComponentなどのインテリセンスエラーが発生するが、プロジェクトが実際にビルドされて正常に実行される場合は、ウィザードを使用して新しいフォームページを追加し、すべてのエラーを修正します...

その後、その新しいページを削除できます。

3

次の場合にこのエラーに遭遇しました;

  1. プロジェクトからContentPage-cs+xamlApp-cs+xamlを実際に削除せずに削除しました。
  2. これらを別のフォルダーのプロジェクトに再追加しました。

これは修正されました;

  1. 問題が存在するクラスの.xamlファイルを選択します。
  2. 右クリックして、propertiesを選択します。
  3. Build actionで[埋め込みリソース]を選択します
  4. Custom Toolに「MSBuild:UpdateDesignTimeXaml」と入力します
  5. クリーンアンドビルド、それはなくなりました。
3
7vikram7

ページテキストx:Class="AppName.Page1"を確認してください。 AppNameはアプリ名でなければなりません

3
developer d

blah.xaml.g.csファイルの(再)生成が実際に問題のようです。私はこれを共有プロジェクトでLOTにします(他に選択肢がない限り、私はそれらを使用しません)。私にとっては、何らかの理由で、Visual StudioよりもXamarin Studioで多く発生します。 XSをまったく使用しないようにします。

多くの場合、他のプラットフォームの1つをアンロードし(たとえば、droidをビルドしている場合は、iosをアンロードします)、クリーンおよび再構築を行うと修正されます。

また、問題のある.xamlファイルの1つを開いて、xamlマークアップの一部を変更する(たとえば、コントロールまたはビューのいずれかにx:Nameを追加または変更する)こともできます。これにより、xaml.g.csファイルが強制的に再生成され、(少なくとも私にとっては)通常は問題が解決します。

これは本当にカントーであってはなりません。

3
wislon

* .xamlを右クリックしてプロパティをクリックし、「カスタムツール」の値を「MSBuild:UpdateDesignTimeXaml」に変更し、次に「ビルドアクション」プロパティを「Embedded Resource」に変更して、プロジェクトをビルドします。

2
Ali Yousefi

クリーンと再構築は私のためのトリックをしました!

2
machie27
  • Visual Studio 2013 update 4環境でも同様の問題があり、Webで見つけたすべての推奨事項を試しました。何も私の問題を解決しませんでした。
  • その後、回避策を試みました。 Visual Studio 2015プレビューをインストールし、xamarin formsプロジェクトで新しい空のアプリを作成しました。
  • 新しいXamlファイルを追加すると、すべてがOKになり、InitialComponentメソッドの問題がなくなりました。
  • 問題の原因がどこにあるのか正確にはわかりませんが、構成設定に関する問題のようです。
2
Tomas Repka

私のために働いた非常にシンプルなソリューション:

  • Xaml/csファイルの内容をコピーします
  • Xaml/csファイルを削除します
  • 新しいクラスを作成し、内容を貼り付けます

これで、InitializeComponent()関数が赤い下線なしで表示されます。

これが誰かを助けることを願っています。

2
Samir Tamri

この問題は、ソリューションのプロジェクトがDLL「Xamarin.Forms.Core」、「Xamarin.Forms.Xaml」、および「Xamarin.Forms.Platform」バージョン1.0.0.0のバージョン1.4.0.0を参照している場合に発生します。

これを解決するには、dllのバージョン1.3.3.0にダウングレードする必要がありましたが、このバージョンではXamarin.Forms.Platform 1.0.0.0は存在しません。

1
Pulcker

このエラーが発生したときにキャッシュの問題が発生しました。

これを修正するには、単にninstall Xamarin.Formsパッケージの最終バージョンとreinstall以前の作業バージョンを使用します。

再構築が成功したら、pdateパッケージを再度最新バージョンに戻します。

1
Ali Yousefi

クラス名を正しく確認してください。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
         x:Class="{AppName}.{ClassName}">
</ContentPage>

クラス名は、アプリ名と部分クラス名の組み合わせにする必要があります

私は時々同じ問題を抱えていましたが、これを修正するために私がやっていました:PCLプロジェクトで、新しいクロスプラットフォームXAMLページをプロジェクトに追加します。 「フック」への参照に新しいXAMLページを追加するには数秒かかります。新しいXAMLページがプロジェクトに正常に追加されると、XAMLページ(問題がある)の赤い下線がクリアされます。問題が解決したら、追加したXAMLファイルを削除するだけです。 -要約すると、新しいXAMLページを追加してから削除すると、問題が解決しました。

1
zinczinc

私はただ更新されたすべてのパッケージ、正常に動作します。

1
Arun Prasad E S

プロジェクトで参照されているXamarin.Formsパッケージのバージョンを確認します。

.csproj fileXamarin.Forms nuget package

1
user1412699

ページプロパティを次のように変更します。

BuildAction => Embedded resource 
CustomTools => MSBuild:UpdateDesignTimeXaml
1
M. Hamza Rajput

これが解決するかどうかはわかりませんが、私にとっては、XAMLの最初の行を削除する必要があります( "xml version =" 1.0 "encoding =" utf-8 ")

時々、ソースバージョン管理は、どのタイプのファイルかを識別し、この種のものを追加しようとします。

0
Miguel Laborde

これは多くのことが原因であるように見えるので、これらすべてを読んでまだ解決していない場合:

私の原因は、Solution ConfigurationReleaseに設定されていることです。 デバッグに変更され、エラーが解決されました。

0
Phil P

私の場合、問題はプロジェクトのパスでした。生成されたコードファイルは、有効なファイル名にするためにエンコードされた絶対パスを含む名前を取得します。パスは「D:\ Projekt C#\ ProjectRootFolder\Project」でした。ビルドツールによって生成されたファイル名は「Project.Droid.D_.Projekt_C_。Namespace etc.」でした。私の場合、プロジェクトを「D:\ project\ProjectRootFolder」のようなパスに移動すると役立ちました。

0
Denis Reichelt

最終的な解決策は、プロジェクトファイルをテキストエディターで編集し、競合しない別のファイルからパターンをコピーすることです。このソリューションは私のために働いた。通常、次の構文を探します。

<Compile Update="Your\Path\YourContentPage.xaml.cs">
  <DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
0
mr5

ルート要素に特定の参照属性(私の場合はutil)がありませんでした:

<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml" 
    x:Class="MyProject.Views.HomePage"
    xmlns:util="clr-namespace:Porject.Library.Util;Assembly=Library"
    >
0
  1. 問題が存在するクラスのApp.xamlおよびMainPage.xamlファイルを選択します。
  2. 右クリックしてプロパティを選択します。
  3. ビルドアクションで[埋め込みリソース]を選択します
  4. カスタムツールに「MSBuild:UpdateDesignTimeXaml」と入力します
  5. クリーンアンドビルド、それはなくなりました。
0
Endrit

私はVS Community Edition 2019で同じ問題を抱えていましたが、再生成ソリューションを使用しましたが、問題は修正されました

using Xamarin.Forms.Xamlを追加

visual Studio 2017でテスト済み

0
TheFranzMaster

私はVisual Studio 2015を使用していますが、同じ問題が発生しましたが、ネット上の回答が完全なソリューションではないことがわかりました。ここで、私にとって何がうまくいったかを説明します。

ここでの私の主な目標は、表示され続ける赤いエラーメッセージを排除することでした

名前InitializeComponentは現在のコンテキストに存在しません

基本的に、InitializeComponent2()とまったく同じことを行うInitializeComponent()という関数を作成し、代わりにそれを使用して、文字通りInitializeComponent()のコードをコピーしました。仕事をします。

次のようになります(説明します)。

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
private void InitializeComponent2()
{
    // Change to:
    //   this.LoadFromXaml(typeof(Page2)); // for Page2
    //   this.LoadFromXaml(typeof(Page3)); // for Page3
    // and put
    //   using Xamarin.Forms.Xaml;
    // at the top of each source file.
    this.LoadFromXaml(typeof(Page1));
}

各ページ(.csファイル)の定義に関数を追加します。

public partial class Page1 : ContentPage
{
    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
    private void InitializeComponent2()
    {
        // Change to:
        //   this.LoadFromXaml(typeof(Page2)); // for Page2
        //   this.LoadFromXaml(typeof(Page3)); // for Page3
        // and put 
        //   using Xamarin.Forms.Xaml; 
        // at the top of each source file.
        this.LoadFromXaml(typeof(Page1));
    }
}

また、LoadFromXaml(..)が使用される各using Xamarin.Forms.Xaml;ページの先頭に.csを配置する必要があります。

そしてもちろん、InitializeComponent()InitializeComponent2()に変更して、新しい関数を呼び出します。つまり、エラーが消えるページと同じコンテキストに関数を配置しました。プロジェクトを変更すると、実際のInitializeComponent関数に何かが追加されるとは想像できませんが、可能性はあります。これまでのところ私にとっては大丈夫です。

ビルドアクション、XAML名前空間の変更、再起動vsクリーニング+再構築、NuGetパッケージの更新の検索など、多くのことを試しました。

基本的に、Visual StudioはAndroidデバイス+エミュレーターでプログラムをコンパイルして正常に実行しましたが、そのエラーメッセージは消えません。私のソリューションはAndroid向けですが、iOSなどでも機能する場合があります。

問題の根本に戻ったInitializeComponent()この関数の実際のコードは、たとえば<Your Project Name>.Page1.xaml.g.csまたはPage2.xaml.g.csというファイルに生成されます。ただし、それ(ファイル)は、特定のイベントが発生したときにのみ生成されます。 xamlページ(.xamlではなく.csで終わるファイル-.xamlファイルが選択されていることを確認してください)の1つに対して、そのイベントを発生させた「カスタムツールネームスペース」にテキストを入力して、 Enterキーを押すと、ファイルが作成されます。

それから、InitializeComponent2()InitializeComponent()とまったく同じ関数を作成し、それを各csファイルに入れて、エラーを解消するたびに.xaml.g.csを生成することなく存在するという素晴らしいアイデアを思いつきました。

0
Dougie

Xamlページプロパティのみで設定
Build Action = Embedded resource
Visual Studio 2017で動作します。

0
saleem kalro

上記のすべてを試してみましたが、うまくいかなかったのは、Xamarin.Formsパッケージを強制的に再インストールすることでした。パッケージマネージャーコンソールのプロンプト。

更新パッケージxamarin.forms -reinstall

パッケージを更新するのではなく、削除して再追加するだけです

0
user755404