在运行时更改xamarin.forms颜色

hartk1213

我正在使用xamarin.forms制作应用程序,并且我已经设置了一种配色方案,现在我希望能够在设置中将其更改为深色样式或浅色样式,但所有这些都可以正常工作,除了我每次都要重新启动应用程序在我选择了不同的配色方案之后。

这是我试图在运行时更改它的地方

   private void DarkThemeClick(object sender, EventArgs e)
    {
        database.DropTable(new StyleModel());
        database.CreateTable(new StyleModel());
        database.SaveItem(new StyleModel() { ThemeNum = 1 });
        App.ActiveStyle = new DarkStyle();
    }

    private void LightThemeClick(object sender, EventArgs e)
    {
        database.DropTable(new StyleModel());
        database.CreateTable(new StyleModel());
        database.SaveItem(new StyleModel() { ThemeNum = 0 });
        App.ActiveStyle = new LightStyle();
    }

这是我正在使用的要更改颜色的项目的示例

    using System;
using TestXamForms.Style;
using Xamarin.Forms;

namespace TestXamForms.Helpers
{
class EntryValueCell : StackLayout
{

    public EntryValueCell(string key,int FieldIdx, string value = "",  bool isNumber = false)
    {
        Entry entry;
        Label label = new Label()
        {
            TextColor = App.ActiveStyle.LabelTextColor,
            Text = key,
            HorizontalOptions = LayoutOptions.End
        };
        if (isNumber)
        {
            entry = new Entry()
            {
                ClassId = FieldIdx.ToString(),
                TextColor = App.ActiveStyle.LabelTextColor,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Keyboard = Keyboard.Numeric,
                Text = value, 


            };
        }
        else
        {
            entry = new Entry()
            {
                ClassId = FieldIdx.ToString(),
                TextColor = App.ActiveStyle.LabelTextColor,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Keyboard = Keyboard.Text,
                Text = value
            };
        }

        BackgroundColor = App.ActiveStyle.StackLayoutBackground;
        Orientation = StackOrientation.Horizontal;
        VerticalOptions = LayoutOptions.FillAndExpand;
        Children.Add(label);
        Children.Add(entry);
    }
}
}

这是其中一种配色方案的示例

    using Xamarin.Forms;

   namespace TestXamForms.Style
 {
     public  class LightStyle : StyleBase
    {
       public LightStyle()
        {
        LabelTextColor = Color.Black;
        ButtonColor = Color.FromHex("337ab7");
        StackLayoutBackground = Color.FromHex("eff0f1");
        InputBackgroundColor = Color.White;
        PlaceHolderColor = Color.Gray;
        TableColor = Color.FromHex("e6e6e6");
        StacklayoutBorderColor = Color.Black;
       }
      }
     }

这是上面文件正在继承的styleBase

using TestXamForms.Models;
using Xamarin.Forms;

namespace TestXamForms.Style
{
public class StyleBase : ModelBase
{
    public enum ThemeNum : int
    {
        Light = 0, Dark = 1
    }
    public Color LabelTextColor { get; set; }
    public Color ButtonColor { get; set; }
    public Color StackLayoutBackground { get; set; }
    public Color InputBackgroundColor { get; set; }
    public Color PlaceHolderColor { get; set; }

    public Color StacklayoutBorderColor { get; set; }

    public Color TableColor { get; set; }

    public int ThemeNums { get; set; }

}
}

这是App.cs文件的一部分,该文件在应用启动时加载配色方案

    static StyleBase activeStyle { get; set; }


    public static StyleBase ActiveStyle
    {
        get
        {
            if (activeStyle == null)
            {
                StyleModel styleBase = database.GetItems(new     StyleModel()).First();
                if (styleBase == null)
                {
                    database.SaveItem(new StyleModel() { ThemeNum = 0 }); //sets the default color scheme to light style 
                    styleBase = database.GetItems(new StyleModel()).First();
                }
                int themeNum = styleBase.ThemeNum;
                switch (themeNum)
                {
                    case (int)StyleBase.ThemeNum.Dark:
                        activeStyle = new DarkStyle();
                        break;
                    case (int)StyleBase.ThemeNum.Light:
                        activeStyle = new LightStyle();
                        break;
                }
            }
            return activeStyle;
        }
        set { } }
全天候

看一下这篇博客文章特别是关于DynamicResources的位Styles

<Application
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="Your.App">
    <Application.Resources>
        <ResourceDictionary>
            <Color x:Key="backgroundColor">#33302E</Color>
            <Color x:Key="textColor">White</Color>
        </ResourceDictionary>
    </Application.Resources>
</Application>

现在设置您的资源

<Label Text="{Binding Name}" FontSize="Medium" FontAttributes = "Bold" TextColor = "{DynamicResource textColor}" LineBreakMode="NoWrap"/>
<Label Text="{Binding Text}" FontSize="Small" LineBreakMode="WordWrap" TextColor = "{DynamicResource textColor}"/>

现在,您可以在代码中即时更改资源

App.Current.Resources ["backgroundColor"] = Color.White;
App.Current.Resources ["textColor"] = Color.Black;

如果您使用的是2.3,则还可以尝试内置主题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时更改背景颜色

来自分类Dev

在运行时更改标题的颜色

来自分类Dev

在运行时更改KendoPanel的颜色

来自分类Dev

Xamarin Forms按钮单击事件在运行时崩溃

来自分类Dev

Android:在运行时更改矩形的颜色

来自分类Dev

libgdx在运行时更改纹理的颜色

来自分类Dev

如何在运行时更改SolidColorBrush资源的颜色?

来自分类Dev

如何在运行时更改RadioGroup的背景颜色?

来自分类Dev

在运行时更改文本的颜色(Unity)?

来自分类Dev

在运行时单击时如何更改按钮的颜色?

来自分类Dev

jQuery Mobile在运行时更改文本颜色

来自分类Dev

粒子效果在运行时更改颜色

来自分类常见问题

如何在运行时xamarin.forms检查APK签名

来自分类Dev

如何在运行时xamarin.forms检查APK签名

来自分类Dev

如何在运行时使用圆角更改LinearLayout的颜色?

来自分类Dev

在Android中以编程方式在运行时在Custom Progress Wheel中更改颜色

来自分类Dev

如何在运行时更改自定义视图颜色?

来自分类Dev

为什么在运行时Date Picker背景颜色更改不可见?

来自分类Dev

如何在运行时更改textview中特定文本的文本颜色?

来自分类Dev

在 NGUI 不工作的情况下在运行时更改 UISprite 色调颜色

来自分类Dev

在运行时更改长方体圆形按钮颜色

来自分类Dev

在运行时更改列表框项目字体颜色

来自分类Dev

AppBarLayout颜色的运行时更改

来自分类Dev

运行时XAML SVG颜色更改

来自分类Dev

Flutter - 运行时更改按钮颜色

来自分类Dev

XAML背景颜色在运行时为黑色

来自分类Dev

在运行时在angularjs中设置文本颜色的样式

来自分类Dev

如何在运行时设置任意主题颜色

来自分类Dev

在运行时设置 JTable 行的颜色

Related 相关文章

热门标签

归档