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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Xamarin

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

Q&A

解決済

1回答

2292閲覧

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

saboten-taro

総合スコア9

Xamarin

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

0グッド

0クリップ

投稿2018/08/09 01:54

編集2018/08/09 04:58

前提・実現したいこと

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 (); } } }

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

f-miyu

2018/08/09 02:51

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

2018/08/09 04:03

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

2018/08/09 04:35

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

2018/08/09 04:58

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

回答1

0

ベストアンサー

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

Xml

1 <ItemGroup> 2 <PackageReference Include="MSBuild.Sdk.Extras" Version="1.4.0" PrivateAssets="All" /> 3 <PackageReference Include="Xamarin.Forms" Version="3.1.0.697729" /> 4 <Compile Include="***.shared.cs" /> 5 <Compile Include="***.xaml.cs" /> 6 </ItemGroup>

投稿2018/08/09 05:51

編集2018/08/09 13:45
f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saboten-taro

2018/08/09 06:34 編集

すみません、お伝えが遅れました 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>(); } } } ``` 実行したのですが、やはり表示されません
f-miyu

2018/08/09 06:37

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

2018/08/09 06:48

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

2018/08/09 07:21

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

2018/08/09 08:20

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

2018/08/09 13:47

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

2018/08/09 13:48

回答ありがとうごさいます! 教えていただきました通り.csprojを編集したところできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問