在导航到另一个页面和返回后修改UI前景色

本文关键字:返回 修改 UI 前景色 导航 另一个 | 更新日期: 2023-09-27 17:54:50

我想修改全景控件页眉的字体颜色:

    <phone:Panorama Name="MainPagePanorama"
                            Title="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
                            Background="{StaticResource QuotePaperBackground}"
                            SelectionChanged="MainPagePanorama_SelectionChanged">
                <phone:Panorama.Foreground>
                    <SolidColorBrush x:Name="TitleColor" Color="{Binding Red, Source={StaticResource WP8AccentColors}}"/>
                </phone:Panorama.Foreground>
           ...
    </phone:Panorama>

和我的事件处理程序:

        private void MainPagePanorama_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            selectedItem = MainPagePanorama.SelectedItem as PanoramaItem;
            Deployment.Current.Dispatcher.BeginInvoke(async () =>
                {
                    await Task.Delay(500);
                    TitleColor.Color = (selectedItem.Foreground as SolidColorBrush).Color;
                });
        }

这工作得很好,直到我导航到另一个页面并导航回来。我使用调试器来查看TitleColor。每次我滑动屏幕时颜色仍然会改变,但UI没有更新。

任何帮助都是感激的。谢谢!

在导航到另一个页面和返回后修改UI前景色

试试下面的代码,它可以帮助你:

 private async void MainPagePanorama_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                selectedItem = MainPagePanorama.SelectedItem as PanoramaItem;
                await Task.Run(() =>
                {
                   Thread.Sleep(100);
                   TitleColor.Color = (selectedItem.Foreground as SolidColorBrush).Color;
                });
            }

我认为你的代码工作(注释如下),但行:

TitleColor.Color = (selectedItem.Foreground as SolidColorBrush).Color;

您正在将TitleColor更改为与其相同- selectedItem.Foreground as SolidColorBrush只不过是<SolidColorBrush x:Name="TitleColor"...

检查它只需将代码替换为:

TitleColor.Color = Colors.Brown;

,看看会发生什么

备注:

  • 当你在代码中设置颜色时,你会破坏xaml
  • 中定义的绑定
  • 我假设你是故意延迟你的颜色变化
  • 查看您的代码已经在主线程上运行,因此没有必要从Dispatcher调用它-它将是相同的。所以你可以像这样运行你的代码:


private async void MainPagePanorama_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    PanoramaItem selectedItem = MainPagePanorama.SelectedItem as PanoramaItem;
    await Task.Delay(500);
    TitleColor.Color = Colors.Brown;
}