UWP / C#将选定的颜色应用于NavigationView

时间:2018-09-16 21:40:31

标签: c# uwp

最终设法使选色器下降并进行了排序,它们目前在OnNavigateTo的基础上工作。

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

上述颜色选择器当前位于设置页面上,NavigationViewItems位于主页上。

我正在查看UI刷新,但据我所知,这不适用于UWP。解决方法是,我正在查看当前的框架导航,但这不起作用

我具有以下允许在导航回“ MainPage”时应用所选颜色的方法:

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;
    }       
}          

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

1 个答案:

答案 0 :(得分:1)

如果您要遵循的行为是:

  

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

在这种情况下,您不需要主页上的 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 事件(在设置页面中)内,将颜色分配给导航菜单项的前景。

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;
    } 
}

为确保每次首次加载应用程序时,都会在资源中获得默认颜色设置,请为NavigationView分配一个Loaded事件并在其中设置默认颜色。

像这样在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;
    } 
}

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