如何在基于Label的Xamarin中创建新元素?

时间:2017-08-30 04:44:24

标签: xamarin xamarin.forms

我经常使用这个元素:

<Label Style="{DynamicResource ListItemTextStyle}" 
       Text="Front Side" 
       HorizontalOptions="StartAndExpand" />

有没有办法可以创建一个名为SettingsText的新元素,然后只需要指定

<SettingText Text="Front Side" />

2 个答案:

答案 0 :(得分:2)

您可以根据需要创建自定义标签并在此构造函数中设置属性。

您需要创建如下所示的自定义标签:

namespace ProjectName
public class SettingText : Label 
    {
        public SettingText()
        {
            this.Style = new Style(typeof(Label)){
                         Setters = {
                                   new Setter {Property = Label.HorizontalOptionsProperty, Value = LayoutOptions.FillAndExpand},
                                   new Setter {Property = Label.VerticalOptionsProperty,  Value = LayoutOptions.StartAndExpand}
                                    }
                         };
            this.TextColor = Color.Red;
        }

    }

在Xaml文件中添加自定义标签的命名空间:

xmlns:local="clr-namespace:ProjectName" 

现在您可以在xaml中使用此自定义标签,如:

<local:SettingText Text="Hello" />

答案 1 :(得分:2)

您可以在App.xaml中定义样式:

<Application.Resources>
    <ResourceDictionary>    
        <Style x:Key="CustomStyle" TargetType="Label">
            <Setter Property="BackgroundColor" Value="Red" />
            <Setter Property="TextColor" Value="Black" />
            <Setter Property="HorizontalOptions" Value="StartAndExpand" />
        </Style>

        <Style x:Key="ListItemTextStyle" TargetType="Label" BasedOn="{StaticResource CustomStyle}"/>
    </ResourceDictionary>
</Application.Resources>

然后,创建一个继承自Label的类并使用上面写的样式。当然,您可以直接在SettingText中定义样式。但如果在应用程序中,您可以在应用程序的任何位置使用它。

class SettingText : Label
{
    public SettingText()
    {
        Style = Application.Current.Resources["ListItemTextStyle"] as Style;
    }
}

用法:

<local:SettingText Text="123"/>

别忘了添加这个

xmlns:local="clr-namespace:ProjectName"

更新

ListItemTextStyle是一个Style,用于定义XAML中的标签样式,找到它并在自定义类中写入这些属性。

class SettingText : Label
{
    public SettingText()
    {
        BackgroundColor = Color.Red;
        TextColor = Color.Red;
        VerticalOptions = LayoutOptions.StartAndExpand;
    }
}

class SettingText : Label
{
    public SettingText()
    {
        var LabelStyle = new Style(typeof(Label))
        {
            Setters = {
                new Setter {Property = Label.TextColorProperty, Value = Color.Red},
                new Setter {Property = Label.BackgroundColorProperty,  Value = Color.Red},
                new Setter {Property = Label.VerticalOptionsProperty,  Value = LayoutOptions.StartAndExpand},
            }
        };

        this.Style = LabelStyle;
    }
}