在导航到另一个页面和返回后修改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没有更新。
任何帮助都是感激的。谢谢!
丹
试试下面的代码,它可以帮助你:
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;
}