首页 > 解决方案 > 将 ColorPicker 选择传递到变量中的 UWP/C# 问题

问题描述

我很难将 ColorPicker 中的颜色传递到另一张纸上。我试图将画笔存储为变量,以便我可以将此变量传递到另一张表中。正如另一个人在我上​​一篇文章中指出的那样,每次我离开页面时,数据都会从设置页面中清除,因此我的“MainPage”无法检索画笔。

用例:每当我更改设置页面上的颜色时,都应该反映在我的主页上。

我根本不知道如何实现这一点,这方面的文档主要是为了在本地使用它。

我在 thge Settings_Page.xaml 中的 ColorChange 上有以下事件触发器:

private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
    {

    }

我正在考虑做一些与我的 GlobalVariables 相关的事情。这涉及 GlobalVariables_PropertyChanged 事件。不过,颜色事件似乎有所不同。

我在 GlobalVariableStorage 类中创建了一个静态类,如下所示:

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

我不知道这是否正确或是否有帮助。

我希望将选定的颜色分配给 GlobalVariables 文本颜色画笔。如果有人对此有更好的执行方法,请告诉我。

我正在尝试使用 MVVM 方法,但在学习的过程中会调整我的代码。

我为我的含糊和缺乏理解道歉。在工作表之间传递画笔信息对我来说是新事物,我只是不知道如何处理它。

编辑:

我添加了以下内容。

在我的 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 “前景”颜色。

标签: c#uwp

解决方案


您正在使用静态类以正确的方式进行操作,每当颜色更改时,您都可以将新颜色的值分配给静态类中的变量并在MainPage上读取它,只需覆盖 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 的类型。


推荐阅读