我如何在Xamarin Forms(例如android)中拥有类似于colors.xml的文件

时间:2018-10-30 07:04:20

标签: c# xaml xamarin xamarin.forms

如何像在Android中那样收集单个文件中的所有颜色代码, 通过引用该文件来使用它们。现在,我正在使用xaml

<Entry Placeholder="Enter name" PlaceholderColor="#177245" ></Entry>
<Entry Placeholder="Enter name" PlaceholderColor="#C04000" ></Entry>

Xamarin.Forms中,我看起来像

<Entry Placeholder="Enter name" PlaceholderColor="@color/DimGray" ></Entry>

2 个答案:

答案 0 :(得分:2)

在App.xaml中,您可以创建资源字典并在其中声明颜色:

<Application xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyApp.App" 
         xmlns:local="clr-namespace:MyApp;assembly=MyApp">
    <Application.Resources>
        <ResourceDictionary>
            <Color x:Key="ThemeColor>#177245</Color>
            <Color x:Key="BackgroundColor>#C04000</Color>
        </ResourceDictionary>
    </Application.Resources>
</Application>

现在,您只需在元素中设置color属性,如下所示:

<Entry Placeholder="Enter name" PlaceholderColor="{StaticResource ThemeColor}" />

答案 1 :(得分:1)

使用您的颜色创建文件:

    using Xamarin.Forms;

    public class ColorConsts
    {
        public Color MyColor1 { get; } = Color.Gray;
        public Color MyColor2 { get; } = Color.Blue;
    }

将对象添加到资源并绑定颜色:

<ContentPage.Resources>
        <local:ColorConsts x:Key="colors"/>
    </ContentPage.Resources>  


    <StackLayout>
        <!-- Place new controls here -->
        <Entry Placeholder="Enter name" PlaceholderColor="{Binding Source={StaticResource colors},Path=MyColor1}" ></Entry>
    </StackLayout>

如果您不想添加到所有页面,请在app.xaml中进行定义:

<Application xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="App16.App"
             xmlns:local="clr-namespace:App16"
             >
    <Application.Resources>
        <local:ColorConsts x:Key="colors"/>
    </Application.Resources>
</Application>

相同的方法可用于数字const,本地化,并且可以参数化xaml中的所有内容。

这种方法的优点是您可以使consts类INotifyPropertyChanged并在运行时更改颜色。