質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • Xamarin

    454questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

XamarinのUIのコンポーネントを作りたいです。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 114

saboten-taro

score 1

 前提・実現したいこと

XamarinのUIのコンポーネントを作りたいです。

 試したこと

XamarinのUIのコンポーネントを作りたいです。

  1. Plugins for Xamarinからテンプレートを作成
  2. C#でLabelやEntryといったコントロールを定義したものをパッケージ化
  3. 他プロジェクトから呼び出す

といったことはできました。
しかし可能であれば、xamlでUIを作り、呼び出せるようしたいと考えています。

xamlを追加し、ルートをcontentViewに変更するなどしてみましたが、
呼び出した際にエラーこそでないものの、画面に表示されません。

  • xamlから作ることは可能でしょうか?
  • その場合通常プロジェクトで画面を作るときと異なる点はどこになるでしょうか?

以下ソースコードです
【Feature1プロジェクト】View1.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Plugin.Feature1.View1">
  <ContentView.Content>
      <StackLayout HorizontalOptions="Center" VerticalOptions="Center" BackgroundColor="Black">
          <Label Text="Hello Xamarin.Forms!" TextColor="White"/>
      </StackLayout>
  </ContentView.Content>
</ContentView>

【Feature1プロジェクト】View1.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Plugin.Feature1
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class View1 : ContentView
    {
        public View1 ()
        {
            InitializeComponent ();
        }
    }
}

【Feature1プロジェクト】IFeature1.shared.cs

using Xamarin.Forms;

namespace Plugin.Feature1
{
    public interface IFeature1
    {
    }
}


【Testプロジェクト】MainPage.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"
             xmlns:hoge="clr-namespace:Plugin.Feature1;assembly=Plugin.Feature1"
             x:Class="Test.Views.MainPage"
             Title="{Binding Title}">

    <StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
        <hoge:View1/>
    </StackLayout>

</ContentPage>


【Testプロジェクト】MainPage.xaml.cs

using Xamarin.Forms;
using Plugin.Feature1;

namespace Test.Views
{
    public partial class MainPage : ContentPage
    {
        public MainPage ()
        {
            InitializeComponent ();
        }
    }
}


よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • f-miyu

    2018/08/09 11:51

    普通にContentViewで作ればいいはずですけど、よろしければ、実際のソースコードを載せていただけますか?

    キャンセル

  • saboten-taro

    2018/08/09 13:03

    ソースコードを追記いたしました。どのファイルを載せるべきかわからず、必要な個所が欠けているかもしれません。お手数をおかけしますが、よろしければその際はご連絡ください。

    キャンセル

  • f-miyu

    2018/08/09 13:35

    View1を使用しているコードもお願いします。

    キャンセル

  • saboten-taro

    2018/08/09 13:58

    ソースコードを追記いたしました。お忙しいところ恐縮ですがご確認をお願い致します。

    キャンセル

回答 1

checkベストアンサー

+1

View1がコンパイルされていなかったのだと思います。
Feature1.csprojを編集して、<Compile Include="**\*.shared.cs" />の下あたりに<Compile Include="**\*.xaml.cs" /> を追記してみてください。

  <ItemGroup>
    <PackageReference Include="MSBuild.Sdk.Extras" Version="1.4.0" PrivateAssets="All" />
    <PackageReference Include="Xamarin.Forms" Version="3.1.0.697729" />
    <Compile Include="**\*.shared.cs" />
    <Compile Include="**\*.xaml.cs" /> 
  </ItemGroup>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/09 15:30 編集

    すみません、お伝えが遅れました
    Prismを活用しているのですが、このような感じでしょうか

    ```
    using Prism;
    using Prism.Ioc;
    using Test.ViewModels;
    using Test.Views;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    using Prism.Unity;

    [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
    namespace Test
    {
    public partial class App : PrismApplication
    {
    /*
    * The Xamarin Forms XAML Previewer in Visual Studio uses System.Activator.CreateInstance.
    * This imposes a limitation in which the App class must have a default constructor.
    * App(IPlatformInitializer initializer = null) cannot be handled by the Activator.
    */
    public App() : this(null)
    {
    new Plugin.Feature1.View1();
    }

    public App(IPlatformInitializer initializer) : base(initializer) { }

    protected override async void OnInitialized()
    {
    InitializeComponent();

    await NavigationService.NavigateAsync("NavigationPage/MainPage");
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
    containerRegistry.RegisterForNavigation<NavigationPage>();
    containerRegistry.RegisterForNavigation<MainPage>();
    }
    }
    }
    ```

    実行したのですが、やはり表示されません

    キャンセル

  • 2018/08/09 15:37

    App(IPlatformInitializer initializer) : base(initializer)の方に書いてみてください。

    キャンセル

  • 2018/08/09 15:48

    試してみましたがやはり表示されません。

    キャンセル

  • 2018/08/09 16:21

    ちょっと原因がわからないので、一旦、新しいプロジェクト(PCLでいいです)でView1を作って試してみたらどうでしょうか?

    キャンセル

  • 2018/08/09 17:20

    単純に参照しているパッケージが更新されていないという可能性もあるかもしれません。

    キャンセル

  • 2018/08/09 22:47

    回答を書き直しました。おそらくこれが原因だと思います。

    キャンセル

  • 2018/08/09 22:48

    回答ありがとうごさいます!

    教えていただきました通り.csprojを編集したところできました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Xamarin

    454questions

    Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。