2014-03-04 64 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