【问题标题】:UWP/C# Applying selected Colour to NavigationViewUWP/C# 将所选颜色应用于 NavigationView
【发布时间】:2018-09-17 20:44:15
【问题描述】:

终于设法让 Colorpickers 下来并排序,它们目前在 OnNavigateTo 基础上工作。

当我从颜色选择器中选择一种颜色时,我想立即应用到我的 NavigationViewItems 的前景,或者在我单击设置页面中名为 TextColourApply_Click 的按钮后应用。

目前提到的颜色选择器位于 settingspage 上,而 NavigationViewItems 位于 MainPage 上。

我正在考虑进行 UI 刷新,但据我所知,这不适用于 UWP。作为一种解决方法,我正在考虑进行当前的框架导航,但这不起作用

我有以下允许在导航回“主页”时应用所选颜色:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    SolidColorBrush DefaultTextColour = Application.Current.Resources["DefaultTextColour"] as SolidColorBrush;

    if (ColourSelections.TextColour != null)
    {
        DefaultTextColour = ColourSelections.TextColour;
    }

    foreach (var item in NavView.MenuItems.OfType<NavigationViewItem>())
    {
        item.Foreground = DefaultTextColour;
    }       
}          

任何关于如何实现这一点的想法将不胜感激。谢谢

【问题讨论】:

  • 基本上总结一下:无论何时按下应用按钮而不是导航到页面时,您都希望更新颜色?
  • 并且此应用按钮出现在设置页面上,对吗?我认为您理想的解决方案是,每当您从颜色选择器中选择一种颜色时,它都应该更改 navigationviewitems 的前景,对吗?
  • 请确保更新您的问题并输入您的用例的完整上下文,您需要提及颜色选择器事件以及您使用的静态类。为了让其他人能够理解您问题的完整背景,请查看答案,以便您更好地了解该问题要提供的内容。

标签: c# uwp


【解决方案1】:

如果您希望的行为如下:

当我从 颜色选择器 中选择一种颜色时,它应该立即应用到我的 NavigationViewItems 的前景并且颜色选择器位于设置页面上。

在这种情况下,您的 MainPage 上不需要 OnNavigatedTo 并且您也不需要 Apply,因此请删除您的 OnNavigatedTo 方法还从您的设置页面中删除应用按钮,然后执行以下操作:

在您的 ShellPage(您的 NavigationView 所在的页面)中创建一个公共静态属性,该属性将公开您的 NavigationView,并确保在您的 ShellPage 的构造函数中对其进行初始化。

public static NavigationView MyNavView;
public ShellPage()
{
    this.InitializeComponent();
    MyNavView = NavView; //here you assign your navigation view to the public static property so you can access it outside this shell page as well.
}

现在在颜色选择器的 colorChanged 事件中(在您的设置页面中),将颜色分配给您的 navigationmenuItems 的前景。

private void TextColourPicker_ColorChanged(ColorPicker sender, ColorChangedEventArgs args)
{
    SolidColorBrush DefaultTextColour = new SolidColorBrush(TextColourPicker.Color);

    foreach (var item in ShellPage.MyNavView.MenuItems.OfType<NavigationViewItem>())
    {
        item.Foreground = DefaultTextColour;
    } 
}

并且只是为了确保当您的应用第一次加载时您会在资源中设置默认颜色,将 Loaded 事件分配给您的 NavigationView 并在其中设置默认颜色。

像这样在 xaml 中添加加载的事件:

<NavigationView x:Name="NavView" Loaded="NavView_Loaded">

您后端的事件将是:

private void NavView_Loaded(object sender, object args)
{
    SolidColorBrush DefaultTextColour = Application.Current.Resources["DefaultTextColour"] as SolidColorBrush;    

    foreach (var item in NavView.MenuItems.OfType<NavigationViewItem>())
    {
        item.Foreground = DefaultTextColour;
    } 
}

请注意,现在您甚至不需要之前使用的公共静态类来保存颜色,因此您也可以删除该类。

【讨论】:

  • 谢谢!对不起这个可怜的问题。我很难用措辞来表达它们。我知道我想在脑海中实现什么,但有时很难解释。我一定会尽快用正确的信息更新问题
  • 没关系,你越练越学,我可以推荐一些c#初级和中级课程吗?我还可以推荐一门 uwp 初学者课程,这些课程将巩固你的基础知识,从长远来看会让你的生活更轻松。
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多