私はその中にStackLayoutを持つFrameを持っています:
<Frame CornerRadius="1" HasShadow="false" Margin="10"
BackgroundColor="White" BorderColor="Silver" Padding="0" >
<StackLayout Orientation="Vertical" Spacing="0" Padding="0" >
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</StackLayout>
</Frame>
StackLayoutが内部にあるFrameと同じNewFrameという新しいオブジェクトを作成できますか?
<template:NewFrame>
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</template:NewFrame>
または
<template:NewFrame>
<xaml:ABCXaml />
</template:NewFrame>
または
<template:NewFrame>
<Label Text="X" />
</template:NewFrame>
私はカスタムビューを使用することを提案しましたが、私は見てきましたが、内部に他の要素が含まれているこの例を見つけることはできません。
ソリューションエクスプローラの共有プロジェクト(またはPCL)の希望の位置を右クリックします( "Views"または "CustomViews"という名前のフォルダを追加し、そのフォルダ内にアイテムを作成することをお勧めします)。 (C#)を使わないで "Content View"を選んでください。ファイル名は "View1.xaml"のようなものにする必要がありますが、好きなだけ変更することはできますが、重要なのはxaml拡張機能です。
これにより、xamlとxaml.csファイルを含む新しいContentViewが作成されます。 xamlファイルの中で上記のxamlコードを宣言し、必要なコードをxaml.csファイルに書き込むことができます。
これで、ビューを配置したいページに名前空間宣言を追加することができます:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
...
xmlns:customs="clr-namespace:YourNamespace.Views;assembly=YourNamespace"
そのページまたはレイアウトのコンテンツの要素を宣言します。
<customs:CustomViewName ... />
要素の動作を制御できるようにしたい場合は、コードビハインドにBindablePropertiesを追加することができます。
詳細については、この記事を参照してください。https://visualstudiomagazine.com/articles/2017/10/01/add-custom-controls.aspx
使うContentView
と一緒にControlTemplate
カスタムコントロールを作成します。このようにして、新しいコントロールを作成することができます。NewFrame
あなたのコントロールのためにXAMLを書いて、<ContentPresenter>
内部のタグ<ControlTemplate>
あなたのコンテンツをどこにしたいかを指定します。
そのようです:
.
└── NewFrame
├── NewFrame.cs
└── NewFrame.xaml -> Is a ResourceDictionary
NewFrame.cs:
namespace TestApp.Controls
{
public partial class NewFrame : ContentView
{
}
}
NewFrame.xaml:
<ResourceDictionary
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:newFrame="clr-namespace:TestApp.Controls"
x:Class="Namespace.For.A.ResourceDictionary">
<Style TargetType="newFrame:NewFrame">
<Setter Property="ControlTemplate">
<Setter.Value>
<ControlTemplate>
<ContentView BackgroundColor="Transparent">
<Frame CornerRadius="1" HasShadow="false" Margin="10" BackgroundColor="White" BorderColor="Silver" Padding="0" >
<StackLayout Orientation="Vertical" Spacing="0" Padding="0">
<ContentPresenter/>
</StackLayout>
</Frame>
</ContentView>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
ConsumeingYourControl.xaml:
<template:NewFrame>
<template:NewFrame.Content>
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</template:NewFrame.Content>
</template:NewFrame>
<template:NewFrame>
<template:NewFrame.Content>
<xaml:ABCXaml />
</template:NewFrame.Content>
</template:NewFrame>
<template:NewFrame>
<template:NewFrame.Content>
<Label Text=""/>
</template:NewFrame.Content>
</template:NewFrame>
ContentProperty
属性? - Tom