Xamarinプロジェクトに複数のContentPage xamlファイルがあります。各ContentPageに共有xamlを埋め込みたいのですが。 xamlの共有部分に特別なものはありません(プラットフォーム固有の処理を行う必要はありません)。 ContentPageのxamlにタグを埋め込んで共有xamlファイルを含めるのと同じくらい簡単ではないでしょうか。誰かが私を正しい方向に向けることができますか?
ContentPage
の親子(たとえば、すべての子をラップするStackLayout)を外部に配置できますxamlファイルを作成し、そのコンポーネントを各ContentPageに含めます。
外部xamlファイルは、ContentPageではなくStackLayoutタイプになります。
編集-コードサンプルを追加しました:
ヘッダーStackLayoutを追加しましょう。クラスの背後にコードを追加します。
public partial class HeaderNavigationBar
{
public HeaderNavigationBar()
{
InitializeComponent();
}
}
次に、XAMLコードを追加します。
<StackLayout x:Class="HeaderNavigationBar"
Orientation="Horizontal"
HorizontalOptions="FillAndExpand"
Padding="10"
BackgroundColor="White">
<Image Source="burger_icon"
HorizontalOptions="StartAndExpand"
Aspect="AspectFit">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding SlideNavigationDrawerCommand}" />
</Image.GestureRecognizers>
</Image>
</StackLayout>
最後に、コンポーネントを再利用するページで、この参照を追加します:<HeaderNavigationBar />
。
IdoTに感謝します。それは私にとってはうまくいきましたが、いくつかの行を追加した後。これはテンプレート/カスタムコントロール/サブフォームの作成に役立つため、Xamarin.Forms全体で簡単に追加/共有できます。
これはあなたの提案に基づいた私の完全な作品ですので、他の人と一緒にそのまま使用できます:
HeaderNavigationBar.xaml
<?xml version="1.0" encoding="utf-8" ?>
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
x:Class="App9.MVC.Views.HeaderNavigationBar"
Orientation="Horizontal"
HorizontalOptions="FillAndExpand"
Padding="10"
ackgroundColor="White">
<Button Text="Internal 1" />
<Button Text="Internal 2" />
</StackLayout>
ご覧のとおり、追加しました:
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
HeaderNavigationBar.cs
では、StackLayout
として宣言されています。
HeaderNavigationBar.cs
using Xamarin.Forms;
namespace App9.MVC.Views
{
public partial class HeaderNavigationBar : StackLayout
{
public HeaderNavigationBar()
{
InitializeComponent();
}
}
}
それを保持する/表示するページの場合:
MainView.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:common="clr-namespace:App9.MVC.Views;Assembly=App9"
x:Class="App9.MVC.Views.MainView">
<StackLayout Padding="0,0,0,20">
<common:HeaderNavigationBar>
<Button Text="External 1" />
</common:HeaderNavigationBar>
<Button Text="Test Button 1
x:Name="btnPage1"
Clicked="btnPage1_clicked" />
</StackLayout>
</ContentPage>
お気づきのように、名前空間にはMainView
内のフルパスがあります。
xmlns:common="clr-namespace:App9.MVC.Views;Assembly=App9"
また、External 1
というボタンがあることがわかります。これは、コントロールがStackLayoutであり、コントロールの追加を処理できるため、内部ボタンにも表示されます。
スクリーンショット:
別のページ内のページについても:
再びIdoTに感謝します。