有没有一种方法可以使我自己的<stacklayout>组件具有一些在构造函数中设置的属性?

时间:2019-02-21 14:06:37

标签: xamarin xamarin.forms

我的代码包含许多这样的实例:

<StackLayout Orientation="Vertical" Spacing="0">

我知道我可以指定一种样式,但是也可以创建自己的模板版本,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<StackLayout xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="Ja.Templates.VStack">
</StackLayout>

using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace Ja.Templates
{
    public partial class VStack : StackLayout
    {
        public VStack()
        {
            InitializeComponent();
            this.Orientation = ..
        }
    }
}

将感谢您的一些建议。谢谢

2 个答案:

答案 0 :(得分:1)

您可以创建扩展 StackLayout 的自定义布局 像这样:

namespace App8
 {
    class VStackLayout :StackLayout
      {
        public VStackLayout()
         {
           //set attribute
           Spacing = 0;
           Orientation = StackOrientation.Vertical;
         }
      }
 }

然后在xaml中:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:App8"
         x:Class="App8.MainPage">

   //use your customlayout
   <local:VStackLayout>
      <!--controls here -->

   </local:VStackLayout>

</ContentPage>   

答案 1 :(得分:-1)

至少您必须添加自定义可绑定属性,这可以通过创建自定义Style

来完成

例如:在App.xaml上为StackLayout创建样式作为资源字典:

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="stackLayoutBaseStyle" TargetType="StackLayout">
            <Setter Property="Orientation" Value="Vertical" />
            <Setter Property="Spacing" Value="0" />
        </Style>
    </ResourceDictionary>
</Application.Resources>

然后只需在需要这种样式的任何StackLayout上使用它

<StackLayout Style="{StaticResource stackLayoutBaseStyle}">
...
</StackLayout>