UWP / C # Проблема, передающая выбор ColorPicker в переменную - PullRequest
0 голосов
/ 16 сентября 2018

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

UseCase : Всякий раз, когда я меняю цвет на странице настроек, это должно отражаться на моей главной странице.

Я вообще не уверен, как это реализовать, и документация по этому вопросу в основном предназначена только для локального использования.

У меня есть следующий триггер на ColorChange в thge Settings_Page.xaml:

private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
    {

    }

Я думал о том, чтобы сделать что-то похожее на одно из моих глобальных переменных. Это включало событие GlobalVariables_PropertyChanged. Событие Color кажется другим.

Я создал статический класс в своем классе GlobalVariableStorage следующим образом:

  public static class ColourSelections
    {
        private static Brush _TextColour;
        public static Brush TextColour
        {
            get { return _TextColour; }
            set { _TextColour = value; NotifyPropertyChanged(); }
        }

Я понятия не имею, правильно ли это или помогает ли это вообще.

Я надеялся назначить выбранный цвет кисти цвета текста GlobalVariables. Если у кого-то есть более эффективные методы выполнения, пожалуйста, дайте мне знать.

Я пытаюсь работать в режиме MVVM, но корректирую свой код по мере того, как иду и учусь.

Я прошу прощения за мою неопределенность и отсутствие понимания. Передача информации о кистях между листами является новой для меня, и я просто не знаю, как к ней подойти.

Edit:

Я добавил следующее.

На моем Settings_Page.xaml.cs:

private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
        {
            SolidColorBrush TextColorBrush = new SolidColorBrush(TextColourPicker.Color);
            ColourSelections.TextColour = TextColorBrush;
        }

Это записывает в следующий класс в GlobalVariableStorage.cs:

public static class ColourSelections
    {
        private static Brush _TextColour;
        public static Brush TextColour
        {
            get { return _TextColour; }
            set { _TextColour = value; NotifyPropertyChanged(); }           
        }      

        public static event PropertyChangedEventHandler PropertyChanged;

        private static void NotifyPropertyChanged([CallerMemberName]string propertyName = "") =>
            PropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
    }

Что мне теперь нужно сделать, это:

Считайте переменную TextColour обратно на главную страницу. Проблема в том, что я пытаюсь изменить это цвет NavigationViewItem "Foreground".

1 Ответ

0 голосов
/ 16 сентября 2018

Вы делаете это правильно, используя класс static , при каждом изменении цвета вы можете присвоить значение нового цвета переменной в вашем статическом классе и прочитать его на MainPage просто переопределите метод OnNavigatedTo на главной странице и назначьте значение цвета для каждого из ваших NavigationViewItems там.

protected override void OnNavigatedTo(object sender, object args)
{
    if(ColourSelections.TextColor != null)
    {
        //considering NavigationItem1 is the x:Name of your first NavigtionViewItem.
        NavigationItem1.Foreground = ColourSelections.TextColor;
    }
}

Примечание. Убедитесь, что тип TextColor SolidColorBrush , поскольку это также тип Foreground.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...