2014-03-04 40 views
1

我正在使用Windows Phone 8工具包和Microsoft.Phone.Controls提供的TransitionService實現NavigationTransition。我期望在轉換過程中頁面會淡入淡出,但默認情況下不會交叉淡入淡出。交叉淡入淡出頁面轉換Windows Phone 8工具包

例如,如果我使用淡出過渡返回到上一頁,則在目標頁面出現之前,原始頁面會變爲完全不透明,從而產生「爆裂」效果。

我希望有人能提供指導,讓這種效果發生。

回答

0

我結束了使用一些輕微的-的手的屏幕截圖和遠背景的面,使手機頁面出現「淡入淡出」 - 這裏編輯了BIZ-細節:

public class FormPage : PhoneApplicationPage { 
    public FormPage() { 
     InitializeComponent(); 
     PrepareAnimationIn(FormApp.frameTransition); 
    } 

    void PrepareAnimationIn(string pageAnimation) { 
     AnimatedPageFactory.SetNavigationInTransition(pageAnimation, this); 
    } 

    public void PrepareAnimationOut(string pageAnimation) { 
     AnimatedPageFactory.SetNavigationOutTransition(pageAnimation, this); 
    } 

    void StoreScreenShot(string name, WriteableBitmap bitmap) { 
     using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) { 
      string path = Path.Combine(screenshotDir, name + screenFileType); 
      store.CreateDirectory(screenshotDir); 
      using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(path, FileMode.Create, store)) { 
       using (BinaryWriter writer = new BinaryWriter(stream)) { 
        int count = bitmap.Pixels.Length * sizeof(int); 
        byte[] pixels = new byte[count]; 
        Buffer.BlockCopy(bitmap.Pixels, 0, pixels, 0, count); 
        writer.Write(pixels, 0, pixels.Length); 
       } 
      } 
     } 
    } 

    WriteableBitmap FetchScreenShot(string name) { 
     WriteableBitmap bitmap = new WriteableBitmap((int)this.ActualWidth, (int)this.ActualHeight); 

     using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) { 
      string path = Path.Combine(screenshotDir, name + screenFileType); 
      if (store.FileExists(path)) { 

       using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(path, FileMode.Open, store)) { 
        using (BinaryReader reader = new BinaryReader(stream)) { 
         int count = bitmap.Pixels.Length * sizeof(int); 
         byte[] pixels = new byte[count]; 
         reader.Read(pixels, 0, count); 
         Buffer.BlockCopy(pixels, 0, bitmap.Pixels, 0, count); 
        } 
       } 

       store.DeleteFile(path); 
      } 
     } 
     return bitmap; 
    } 

    WriteableBitmap ScreenShot() { 
     WriteableBitmap bmpCurrentScreenImage = new WriteableBitmap((int)this.ActualWidth, (int)this.ActualHeight); 
     bmpCurrentScreenImage.Render(_canvas, new MatrixTransform()); 
     bmpCurrentScreenImage.Invalidate(); 
     return bmpCurrentScreenImage; 
    } 

    ImageBrush ImageBrushFromBitmap(WriteableBitmap bitmap) { 
     return new ImageBrush { ImageSource = bitmap }; 
    } 

    static Stack<string> formImages = new Stack<string>(); 
    static string screenFileType = ".frmscn"; 
    static string screenshotDir = "frmscrn"; 

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) { 

     var app = Application.Current as App; 

     if (e.NavigationMode == NavigationMode.New && 
      e.Uri.ToString().Contains("FormPage.xaml")) { 

      WriteableBitmap screenShot = ScreenShot(); 

      app.RootFrame.Background = ImageBrushFromBitmap(screenShot); 

      formImages.Push(Name); 
      StoreScreenShot(Name, screenShot); 

     } else if (e.NavigationMode == NavigationMode.Back) { 
      if (formImages.Count > 0) 
       app.RootFrame.Background = ImageBrushFromBitmap(FetchScreenShot(formImages.Pop())); 
      else { 
       //we're backing out of the last form so reset the background 
       app.RootFrame.Background = null; 
       RemoveCachedScreenshots(); 
      } 
     } 
    } 

    public static void RemoveCachedScreenshots() { 
     using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) { 
      string path = Path.Combine(screenshotDir, "*" + screenFileType); 
      try { 
       string[] fileList = store.GetFileNames(path); 
       foreach (string f in fileList) { 
        store.DeleteFile(Path.Combine(screenshotDir, f)); 
       } 
      } catch { 

      } 
     } 
    } 
} 
0

請檢查您的App.xaml.cs RootFrame的類型,它必須是TransitionFrame如果想使用NavigationTransition。

+0

我使用TransitionFrame並且頁面在它們改變時具有轉換效果,但是它們不是交叉漸變的,即一次只能看到單個頁面 - 因此沒有交叉漸變 – jchristof