2014-03-30 2 views
0

로 이동 후 나는 파노라마 컨트롤의 헤더의 글꼴 색상을 수정할 :수정 UI 전경색 다른 페이지 및 백

<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.Color가 계속 변경된다는 것을 알았지 만 UI가 어떻게 든 업데이트되지는 않습니다.

도움을 주시면 감사하겠습니다. 감사!

-Dan

답변

0

당신을 도울 수있는이 코드를보십시오 :

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; 
       }); 
      } 
+0

확신 ... – user1447343

+0

그것이 정말 도움이되지 않았거나 ... –

0

을 나는 코드가 작동 생각 (아래 발언)하지만 라인 :

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

당신이 변화하고있다 동일하게 TitleColor 인 경우 - selectedItem.Foreground as SolidColorBrush<SolidColorBrush x:Name="TitleColor"... 이상입니다.

TitleColor.Color = Colors.Brown; 

어떻게되는지 :

은 단지에 코드를 repleace 확인하십시오.

비고 :

  • 당신은 당신의 코드에서 색상을 설정할 때, 당신은 당신이
  • 난 당신이 목적
  • 에 색상 변화를 지연한다고 가정 코드가 이미 있음을 볼 XAML에 정의 된 바인딩 파괴 Main 스레드에서 실행되므로 Dispatcher에서 호출 할 필요가 없습니다. 이는 동일합니다. 그래서 당신은 이런 식으로 코드를 실행할 수 있습니다 만 UI 스레드에서 UI를 수정할 수


private async void MainPagePanorama_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    PanoramaItem selectedItem = MainPagePanorama.SelectedItem as PanoramaItem; 

    await Task.Delay(500); 
    TitleColor.Color = Colors.Brown; 
} 
+0

나는 아직도 문제가있다. 그것은 내가 설정 한 색상이 아니며 변경 사항을 표시하지 않습니다 (디버거에서 TitleColor.Color가 변경된 것을 볼 수 있지만 어떻게 든 변경 사항이 표시되지 않음) – user1447343

+0

@ user1447343 Weird. 이 문제에 대한 간단한 작업 예제를 공유 할 수 있습니까? – Romasz