2014-09-15 16 views
6

Windows Phone 8.1 ha introdotto una nuova transizione per finestre di dialogo e riquadri che assomiglia a un Venetian blind. Non mi piace questo; Ho preferito il modo in cui appariva in Windows Phone 8, in cui era ruotato/inclinato. C'è un modo per cambiare questo?Come modificare la transizione ContentDialog?

Ho provato cose come:

<ContentDialog.Transitions> 
    <TransitionCollection> 
    </TransitionCollection> 
</ContentDialog.Transitions> 

Ma non cambia la transizione.

+0

Intendi l'MessageBox mostra/nascondi animazione? –

+0

['MessageDialog'] (http://msdn.microsoft.com/en-au/library/windows/apps/windows.ui.popups.messagedialog) mostra/nascondi l'animazione è quella che voglio per il mio' Flyout's e 'ContentDialog's. –

+0

Nel caso in cui, hai dato un'occhiata qui: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.animation.transitioncollection.aspx – nicolas

risposta

4

Non è possibile sovrascrivere le transizioni in ContentDialog, ecc. Sono progettate per essere semplici modi per ottenere un comportamento standard e utilizzeranno sempre PopupThemeTransition.

Se si desidera un comportamento non standard, è possibile scrivere un controllo personalizzato che utilizza la propria TransitionCollection. Non sono riuscito a trovare alcun campione esistente esattamente di questo, ma controlla il CustomDialog di Callisto per il concetto generale. Simula Windows MessageDialog con contenuti in una barra centrata orizzontalmente su una finestra di oscuramento a schermo intero, ma non dovrebbe essere difficile spostare l'interfaccia utente in modo che corrisponda al pannello con il pannello superiore di Windows Phone.

Una volta che sei sotto il tuo controllo, puoi utilizzare qualsiasi transizione tu voglia. Non ho un dispositivo WP8 a portata di mano per vedere quale sia stata la transizione, ma il PaneThemeTransition con Edge = "Left" suona come se corrispondesse alla tua descrizione. Altrimenti, una volta avviate le transizioni, puoi scambiarla con una che ti piace o rimuovere tutte le transizioni e applicare la tua animazione con Storyboard. O rispetterei una transizione standard che ha senso per l'utente o eseguire una personalizzazione completa poiché le transizioni dei temi potrebbero cambiare di nuovo.

Creare un pannello che sembra corretto è piuttosto semplice. La parte difficile è in come mostrare il controllo. Se lo includi nel tuo Xaml quindi è parte dell'albero visivo per iniziare, quindi puoi semplicemente mostrarlo. Se non si trova nell'albero visivo, è necessario aggiungerlo all'albero visivo o ospitarlo in un popup.

Ecco un UserControl veloce e sporco che si ospita in un Popup e utilizza un PaneThemeTransition per scorrere da destra.

<UserControl 
x:Class="App199.MyUserControl1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:App199" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="300" 
d:DesignWidth="400" 
PointerReleased="UserControl_PointerReleased"> 
<UserControl.Transitions> 
    <TransitionCollection> 
     <PaneThemeTransition Edge="Left"/> 
    </TransitionCollection> 
</UserControl.Transitions> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition x:Name="statusBarRow" Height="0" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row ="1" Background="Black"> 
     <Ellipse Height="100" Width="100" Fill="Yellow" /> 
     <TextBlock>Lorem Ipsum</TextBlock> 
     <Rectangle Height="100" Width="100" Fill="Red" /> 
    </StackPanel> 
    <Border Grid.Row="2" Background="#7F000000" /> 
</Grid> 

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.Phone.UI.Input; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 

// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 

namespace App199 
{ 
    public sealed partial class MyUserControl1 : UserControl 
    { 
     Popup hostPopup; 
     public MyUserControl1() 
     { 
      this.InitializeComponent(); 
      hostPopup = new Popup(); 
      hostPopup.Child = this; 

      Loaded += MyUserControl1_Loaded; 
      Unloaded += MyUserControl1_Unloaded; 
     } 

     void MyUserControl1_Loaded(object sender, RoutedEventArgs e) 
     { 
      HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
     } 

     void MyUserControl1_Unloaded(object sender, RoutedEventArgs e) 
     { 
      HardwareButtons.BackPressed -= HardwareButtons_BackPressed; 
     } 

     public void Show() 
     { 
      this.Height = Window.Current.Bounds.Height; 
      this.Width = Window.Current.Bounds.Width; 

      var occRect = Windows.UI.ViewManagement.StatusBar.GetForCurrentView().OccludedRect; 
      statusBarRow.Height = new GridLength(occRect.Height); 

      hostPopup.IsOpen = true; 
     } 

     void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
     { 
      if (hostPopup.IsOpen) 
      { 
       hostPopup.IsOpen = false; 
       e.Handled = true; 
      } 
     } 

     private void UserControl_PointerReleased(object sender, PointerRoutedEventArgs e) 
     { 
      hostPopup.IsOpen = false; 
     } 
    } 
} 
+0

Va bene. Ma si perde la vera natura di una finestra di dialogo modale fornita da ContentDialog. È necessario disabilitare qualsiasi interazione possibile con il Frame/Pagina in basso. Solo una sovrapposizione a schermo intero non risolve questo problema. Anche l'hardware BackButton è gestito meglio da ContentDialog. Usando un Popup devi gestirlo da solo. Ciò può diventare disordinato in base all'ordine di registrazione tra le finestre di dialogo e le pagine. Tutto questo solo per rimuovere questa stupida animazione. – bitdisaster

Problemi correlati