簡體   English   中英

UWP / C#將選定的顏色應用於NavigationView

[英]UWP/C# Applying selected Colour to NavigationView

最終設法使選色器下降並進行了排序,它們當前在OnNavigateTo的基礎上工作。

當我從顏色選擇器中選擇一種顏色時,我想立即應用到我的NavigationViewItems的前景中,或者單擊一次設置頁面中名為TextColourApply_Click的按鈕后,將其應用。

提到的顏色選擇器當前在settingspage上 ,NavigationViewItems在MainPage上

我正在查看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;
    }       
}          

任何關於如何暗示這一點的想法將不勝感激。 謝謝

如果您想要的行為如下:

當我從顏色選擇器中選擇一種顏色時,應立即將其應用於我的NavigationViewItems的前景,並且顏色選擇器位於設置頁面上。

在這種情況下你不需要的OnNavigatedTo您和的MainPage你不需要的應用一樣,所以刪除您的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;
    } 
}

請注意,現在您甚至不需要以前使用的公共靜態類來保存顏色,因此您也可以刪除該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM