5

私はその中に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>

私はカスタムビューを使用することを提案しましたが、私は見てきましたが、内部に他の要素が含まれているこの例を見つけることはできません。


2 답변


0

ソリューションエクスプローラの共有プロジェクト(または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


  • 私にとっての問題は、それが単なるフレームであり、フレーム内に異なるXAMLコードがあることです。 XAMLの同じセットだけではありません。私はそれにどのように対処できるのか知っていますか? - Alan2
  • いいえ、それを行うには良い方法はありません。バリエーションごとに複数のクラスを作成できます - Markus Michel

0

使う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>

関連する質問

最近の質問