Nano Hash - криптовалюты, майнинг, программирование

Сохранение пользовательских настроек цвета нажатой кнопки в WPF

У меня небольшая проблема с сохранением некоторых свойств моих кнопок. Кнопки маленькие и разноцветные. Когда я нажимаю одну кнопку, некоторые указанные цвета меняются... и я хочу сохранить их для следующего запуска. Значения текстового поля я могу сохранить, но это ... я не могу.

Код:

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.

Вот как это выглядит:

введите здесь описание изображения

Эти 3 маленькие кнопки:

  • белый
  • синий
  • красный

предназначены для изменения внешнего вида программы. При каждом запуске возвращается значение по умолчанию.

12.08.2013


Ответы:


1

Вы можете сохранить цвет как простую строку, и 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.

Более подробную информацию вы можете увидеть здесь:

преобразователи типов и 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

введите здесь описание изображения

12.08.2013
  • Мне не нужно хранить цвета... их слишком много. Как насчет того, чтобы последняя нажатая кнопка была сохранена и загружена при следующем запуске? 12.08.2013
  • Что ж, когда я нажимаю кнопку, применяются все цвета из этого метода. Я хочу сохранить это. Что-то вроде blueColor_Click (было нажато... затем сохраните его и запустите при следующем запуске). 12.08.2013
  • @user2558921: Хорошо, как я понял: вы хотите сохранить цвет элемента управления, и в следующий раз они должны быть загружены. Вы должны создать каждый цвет в параметре настроек типа string (см. мой пример). Как я вижу в вашем примере, у вас есть два цвета. В настройках создайте два параметра с двумя цветами. Вы меняете значение и вызываете Save(), тогда изменения будут сохранены. 12.08.2013
  • Это не работает, сохранение цвета кода не делает его активным при следующем запуске. 13.08.2013
  • @user2558921: Покажите мне, что вы пробовали, а также в моем примере? Для меня это работает. 13.08.2013
  • Я не могу воспроизвести ваш код даже в пустом новом wpf только с одной кнопкой... я получаю ошибки или ничего не происходит, мне все равно нужно нажать эту кнопку, чтобы она вступила в силу. Ничего не экономит. :( Мне нужно вставить оба кода xaml-cs? 13.08.2013
  • Проблема здесь: Ошибка: Имя Настройки не существует в пространстве имен clr-namespace: noia_4__. Свойства ......: Фон = {Источник привязки = {x: Статические свойства: Настройки. По умолчанию}, Путь = setColor , Mode=TwoWay}... Можно ли это сделать в С#? 13.08.2013
  • @user2558921: Вам нужно написать название ваших настроек, я не знаю, как они называются в вашем проекте. У вас работает мой пример? Если это сработает, может быть, вы найдете мой ответ полезным? 13.08.2013
  • Да, ваше приложение работает нормально, спасибо. Мне нужно исправить свое сейчас с помощью вашего примера :) 13.08.2013

  • 2

    Вероятно, вам нужно создать элементы на вкладке Settings вашего проекта, в которых хранится информация о цвете. Я бы рекомендовал хранить шестнадцатеричные строки. Затем на MainForm_Load извлеките эти значения.

    Не забудьте также поместить настройки в область User, иначе они будут сбрасываться при каждом закрытии приложения.

    12.08.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..