在WPF中保存单击按钮的用户颜色设置

时间:2013-08-12 17:37:39

标签: c# wpf button settings

我在保存按钮的某些属性时遇到了一些问题。按钮很小,有各种颜色。当我按下一个按钮时,一些指定的颜色正在改变......我想保存它们以便下次启动。文本框值我可以保存它们但是......我不能。

代码:

public MainWindow()
{
    InitializeComponent();

    //blueColor.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
    //this.Property = Properties.Settings.Default.userColor;
}

private void blueColor_Click(object sender, RoutedEventArgs e)
{
    var bc = new BrushConverter();
    Main.Background = (Brush)bc.ConvertFrom("#FF007CE4");

    startButton.Foreground = (Brush)bc.ConvertFrom("#FF007CE4");
    closeButton.Foreground = (Brush)bc.ConvertFrom("#FF007CE4");
    Properties.Settings.Default.userColor = true;
    Properties.Settings.Default.Save();
}

private void purpleColor_Click(object sender, RoutedEventArgs e)
{
    var bc = new BrushConverter();
    Main.Background = (Brush)bc.ConvertFrom("#FF8701B9");
    startButton.Foreground = (Brush)bc.ConvertFrom("#FF8701B9");
    closeButton.Foreground = (Brush)bc.ConvertFrom("#FF8701B9");
}

我想我需要保存最后点击的按钮,因为我有很多颜色,也许.RaiseEvent可以在这里提供帮助。

这就是它的样子:

enter image description here

那3个小按钮:

  • 蓝色
  • 红色

用于更改程序的外观。每次启动时,默认值都会恢复。

2 个答案:

答案 0 :(得分:2)

您可以将颜色存储为简单字符串,TypeConverter会自动将其转换为Brush类型。以下是一个例子。

从XAML绑定默认值:

xmlns:properties="clr-namespace:WorkWithSettings.Properties"

<Button Width="100" Height="30"
        Background="{Binding Source={x:Static properties:Settings.Default}, Path=Setting, Mode=TwoWay}" />

从代码中设置值:

private void Button_Click(object sender, RoutedEventArgs e)
{
    WorkWithSettings.Properties.Settings.Default.Setting = "#FF007CE4";
}

Note:设置 - 这只是String的类型。

您可以在此处看到更多信息:

TypeConverters and XAML

Edit:

下面我将向您展示一个例子,希望对您有所帮助。

因此,请进入项目设置:Project -> Properties -> Parameters。这将打开一个大约的窗口:

enter image description here

这里我们有一个属性ButtonColor,在设置中定义。例如,我根据按下按钮的颜色选择了更改背景的Button

要使属性Background与要执行的设置同步,请执行以下操作:

<Button Width="100" Height="30" 
        Content="TestButton" 
        Background="{Binding Source={x:Static properties:Settings.Default}, Path=ButtonColor, Mode=TwoWay}" />

白色的默认背景颜色。现在,要在按钮处设置背景颜色,我们更改参数设置,如下所示:

private void Blue_Click(object sender, RoutedEventArgs e)
{
    WorkWithSettings.Properties.Settings.Default.ButtonColor = "Blue";
}

要保存对设置的更改,您需要调用方法Save()

private void Save_Click(object sender, RoutedEventArgs e)
{
    WorkWithSettings.Properties.Settings.Default.Save();
}

现在,下次启动程序时,颜色将是最后设置的颜色。

<强> Full example

XAML

<Window x:Class="WorkWithSettings.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:properties="clr-namespace:WorkWithSettings.Properties"
    WindowStartupLocation="CenterScreen"
    Title="MainWindow" Height="350" Width="525">

    <Grid>
        <TextBlock Width="100" Height="30" Text="{Binding Source={x:Static properties:Settings.Default}, Path=ButtonColor, Mode=TwoWay}" Margin="0,60,0,0" />
        <Button Width="100" Height="30" Content="TestButton" Background="{Binding Source={x:Static properties:Settings.Default}, Path=ButtonColor, Mode=TwoWay}" />

        <WrapPanel>           
            <Button Name="Blue" Width="100" Height="30" Content="BlueColor" VerticalAlignment="Top" Click="Blue_Click" />
            <Button Name="Red" Width="100" Height="30" Content="RedColor" VerticalAlignment="Top" Click="Red_Click" />
            <Button Name="White" Width="100" Height="30" Content="WhiteColor" VerticalAlignment="Top" Click="White_Click" />
        </WrapPanel>

        <Button Name="Save" Width="60" Height="30" Content="Save" VerticalAlignment="Top" HorizontalAlignment="Right" Click="Save_Click" />
    </Grid>
</Window>

Code behind

namespace WorkWithSettings
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void White_Click(object sender, RoutedEventArgs e)
        {
            WorkWithSettings.Properties.Settings.Default.ButtonColor = "White";
        }

        private void Blue_Click(object sender, RoutedEventArgs e)
        {
            WorkWithSettings.Properties.Settings.Default.ButtonColor = "Blue";
        }

        private void Red_Click(object sender, RoutedEventArgs e)
        {
            WorkWithSettings.Properties.Settings.Default.ButtonColor = "Red";
        }

        private void Save_Click(object sender, RoutedEventArgs e)
        {
            WorkWithSettings.Properties.Settings.Default.Save();
        }
    }
}

Output

enter image description here

答案 1 :(得分:1)

您可能需要在项目的Settings标签中创建项目,以存储有关颜色的信息。我建议存储十六进制字符串。然后,在MainForm_Load上检索这些值。

确保同时将设置放在User范围内,否则每次关闭应用程序时都会重置这些设置。