我有以下XAML代码:
<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>
有人对我如何用类似的东西代替它有任何想法吗?
<template:NewFrame>
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</template:NewFrame>
如您所见,我熟悉如何创建和使用包含元素的模板,但是我不知道如何创建可用作元素包装的模板。
答案 0 :(得分:1)
一种方法是@Tom所说的,另一种是使用Control template,这基本上就是我想要的。
即使医生说得很坚强
Xamarin.Forms控件模板提供了在运行时轻松地为应用程序页面设置主题和重新主题的功能。本文提供了控件模板的介绍
您可以在ContentView
中将控制模板用作包装器(我已经做完了,并且效果很好)。
在您的情况下,您必须执行ContentView
并用包装器的布局填充ContentView.ControlTemplate
:
<ContentView
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:... your namespaces
x:Class="YourNamespace.NewFrame">
<ContentView.ControlTemplate>
<ControlTemplate>
<Frame CornerRadius="1" HasShadow="false" Margin="10"
BackgroundColor="White" BorderColor="Silver" Padding="0" >
<ContentPresenter />
</Frame>
</ControlTemplate>
</ContentView.ControlTemplate>
</ContentView>
如您所见,有一个ContentPresenter
将会被您的内容替换(要考虑的一件事是ContentPresenter
仅允许一个孩子,因此您必须将您的StackLayout
放在里面)
<template:NewFrame>
<StackLayout Orientation="Vertical" Spacing="0" Padding="0" >
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</StackLayout>
</template:NewFrame>
另一种方法是做一个custom layout,但是它更复杂,我不会去做那种布局包装器。
答案 1 :(得分:0)
public class CustomFrame : Frame
{
public CustomEditor()
{
CornerRadius = 1;
HasShadow = false;
Margin = 10;
BackgroundColor = Color.White;
BorderColor = Color.Silver;
Padding = 0;
}
}
<template:CustomFrame>
<StackLayout
Orientation="Vertical"
Spacing="0"
Padding="0" >
<xaml:PtiXaml />
<template:LineTemplate />
<xaml:AtiXaml />
<template:LineTemplate />
<xaml:StiXaml />
</StackLayout>
</template:CustomFrame>