【问题标题】:Persistent button color changes in C# WPFC# WPF 中的持久按钮颜色更改
【发布时间】:2017-11-10 09:28:18
【问题描述】:

我正在用 C# 和 WPF 设计一个简单的应用程序,其中包含多个在单击时会改变颜色的按钮。

每个单独的按钮都会独立地将颜色变为红色(第一次单击),然后变为绿色(第二次单击)。

我正在寻找一种方法来使这些更改在应用程序运行之间持续存在。 换句话说,如果 1 个按钮设置为绿色,1 个按钮设置为红色,我希望它们保持颜色(除非我更改它),无论我打开和关闭应用程序多少次。我可以使用的代码示例非常受欢迎。非常感谢任何帮助或代码示例。谢谢!

这是 WPF:

    <Button x:Name="btn0" Focusable="False"  Margin="277,100,173,148" Click="btn0_Click" Content="access"/>
    <Button x:Name="btn1" Focusable="False"  Margin="189,100,253,148" Click="btn1_Click" Content="access"/>

这是代码(我知道它有点乱):

    namespace WpfApp7
    {
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }       
    private bool _IsOn;
    public bool IsOn
    {
        get
        {
            return _IsOn;
        }
        set
        {
            _IsOn = value;
            btn0.Background = _IsOn ? Brushes.Green : Brushes.Red;
        }
    }
    private void btn0_Click(object sender, RoutedEventArgs e)
    {
        IsOn = !IsOn;
    }
    private bool _IsOn1;
    public bool IsOn1
    {
        get
        {
            return _IsOn1;
        }
        set
        {
            _IsOn1 = value;
            btn1.Background = _IsOn1 ? Brushes.Green : Brushes.Red;
        }
    }
    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        IsOn1 = !IsOn1;
    }
}
}

【问题讨论】:

  • 如果您需要持久状态,请在退出时保存(应用程序外部某处)当前值并在下次运行时读取和恢复值
  • wpf 中有一个ToggleButton,使用它的IsChecked 并更改颜色with the trigger。以某种方式使用绑定和序列化/反序列化源(请参阅this)是实现您想要的正确方法。

标签: c# wpf button boolean persistent-data


【解决方案1】:

首先您需要添加转到您的项目设置并添加一个属性: 您可以输入颜色的名称或十六进制值("#FF007CE4"

然后将颜色绑定到属性:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:properties="clr-namespace:WpfApplication1.Properties"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Name="button" Width="100" Height="30" Background="{Binding Source={x:Static properties:Settings.Default}, Path=Color1, Mode=TwoWay}" Click="button_Click" />
    </Grid>
</Window>

设置颜色:

private void button_Click(object sender, RoutedEventArgs e)
{
   if(Properties.Settings.Default.Color1 == "White")
   {
      Properties.Settings.Default.Color1 = "Black";
   }
   else
   {
      Properties.Settings.Default.Color1 = "White";
   }
}

编辑:

要保存您需要的颜色更改:

Properties.Settings.Default.Save();

【讨论】:

  • 您还可以将属性类型从string 更改为System.Windows.Media.SolidColorBrush 以继续使用Brushes.Red
  • 您的回答很有帮助。我正在寻找一种无需实际编写序列化/反序列化即可保存此设置的方法。如果我想对(比方说)10 个按钮使用这种方法,我必须进行 10 个单独的设置吗?
  • 根据Question,您可以通过编程方式添加属性。 foreach( var button in this.Controls.OfType&lt;Button&gt;()) { AddProperty(button.Name); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
相关资源
最近更新 更多