2

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

代码:

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 可以在这里提供帮助。

这是它的样子:

在此处输入图像描述

那三个小按钮:

  • 白色的
  • 蓝色的
  • 红色的

用于改变程序的外观。每次开始时,默认值都会返回。

4

2 回答 2

2

您可以将颜色存储为简单的字符串并TypeConverter自动将其转换为 type 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.

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

类型转换器和 XAML

Edit:

下面我给大家举个例子,希望对你有帮助。

所以,进入项目的设置:Project -> Properties -> Parameters. 这会打开一个大约如下的窗口:

在此处输入图像描述

这里我们有一个属性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

在此处输入图像描述

于 2013-08-12T17:58:39.807 回答
1

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

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

于 2013-08-12T17:48:09.623 回答