0

我试图让用户有可能改变应用程序的颜色。我正在使用 WPF 扩展工具包获取颜色,然后将其保存到设置中,因此当我再次运行它时,将应用颜色。问题是对于矩形它工作得很好,但对于标签和它的背景,当我再次运行应用程序时,它会自动变成白色而不是保存颜色。这是我的代码:

选项类和 xaml

public Options(MainWindow main)
    {
        InitializeComponent();
        window = main;

        BackgroundColor.SelectedColor = (Color)ColorConverter.ConvertFromString(Settings.Default.Main_Background);
        TopBarBackColor.SelectedColor = (Color)ColorConverter.ConvertFromString(Settings.Default.Main_TopBack);
    }

    private void Color_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs<Color> e)
    {
        Settings.Default.Main_Background = BackgroundColor.HexadecimalString;
        Settings.Default.Main_TopBack = TopBarBackColor.HexadecimalString;
        Settings.Default.Save();
        window.ColorChange(Settings.Default.Main_Background, Settings.Default.Main_TopBack);

    }

我有标签(TopBarMain)和矩形(背景)的MainWindow

public void ColorChange(String _Main_B, String _Main_TopBar)
    {
        var converter = new BrushConverter();

        try
        {
            Background.Fill = (Brush)converter.ConvertFromString(_Main_B);
            TopBarMain.Background = (Brush)converter.ConvertFromString(_Main_TopBar);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            Background.Fill = (Brush)converter.ConvertFromString("#E5EEEEEE");
            TopBarMain.Background = (Brush)converter.ConvertFromString("#7FC3C3C3");
        }


    }

我这样称呼它,然后运行一个应用程序:

public MainWindow()
    {
        InitializeComponent();

        ColorChange(Settings.Default.Main_Background, Settings.Default.Main_TopBack);

        option = new Options(this);

    }

其中选项是:

选项选项;

调用选项类。我不知道问题出在哪里了。请帮忙。

4

1 回答 1

0

好的,我做到了。问题是,当组件初始化时,我正在更改 Color Canvas 的 Selected Color,然后 Selected Color 事件自动运行,它将我的 Settings Main_TopBack 变量更改为默认值(白色)并保存它。如果像这样加载颜色,我所做的只是实现了布尔控制:

bool ColorsLoaded = false;
    public Options(MainWindow main)
    {
        InitializeComponent();
        window = main;

        BackgroundColor.SelectedColor = (Color)ColorConverter.ConvertFromString(Settings.Default.Main_Background);
        TopBarBackColor.SelectedColor = (Color)ColorConverter.ConvertFromString(Settings.Default.Main_TopBack);

        ColorsLoaded = true;
    }

    private void Color_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs<Color> e)
    {
        if (ColorsLoaded)
        {
            Settings.Default.Main_Background = BackgroundColor.HexadecimalString;
            Settings.Default.Main_TopBack = TopBarBackColor.HexadecimalString;
            Settings.Default.Save();
            window.ColorChange();
        }

    }

不过感谢您的帮助。

于 2013-09-27T14:33:10.363 回答