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"라는 폴더를 추가하고 해당 폴더 내에 항목을 만드는 것이 좋습니다). "Add new item"을 선택하고 (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>

ConsouringYourControl.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>

관련된 질문

최근 질문