我有一个带有StackLayout的框架:
<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>
我可以创建一个名为NewFrame的新对象,该对象与其中具有StackLayout的Frame相同吗?
<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>
有人建议我使用“自定义视图”,但我已经查看过并且找不到包含内部其他元素的示例。
答案 0 :(得分:0)
在解决方案资源管理器中的共享项目(或PCL)中的所需位置上右键单击(我建议添加一个名为“视图”或“ CustomViews”的文件夹并在该文件夹中创建该项目),选择“添加新的项目”,然后选择“内容视图”(其后没有(C#)。文件名应类似于“ View1.xaml”,您可以根据自己的喜好进行更改,但是重要的是xaml扩展名已经存在。< / p>
这将使用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
答案 1 :(得分: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>
ConsumingYourControl.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>