最终设法使选色器下降并进行了排序,它们目前在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;
}
}
任何关于如何实现这一点的想法将不胜感激。谢谢
答案 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;
}
}
请注意,现在您甚至不需要以前使用的公共静态类来保存颜色,因此您也可以删除该类。