2012-04-19 3 views
6

Sto tentando di far corrispondere l'orientamento del videobrush all'orientamento del telefono, ma sto riscontrando problemi nell'implementazione di questa soluzione. La mia pagina xaml è impostata su PortraitOrLandscape, e mi piacerebbe che il videobrush fosse rivolto verso l'alto indipendentemente dall'orientamento del telefono. Prima di aggiungere l'orientamento cambia if per l'evento onOrentationChanged, la seguente situazione si sta verificandoL'orientamento del videobrush non corrisponde all'orientamento del telefono

Telefono: Paesaggio a sinistra, Videobrush: lato destro fino

Telefono: Ritratto, Videobrush, ruotato in senso orario -90

Phone : Paesaggio destra, Videobrush, ruotato in senso orario -180

XAML

<Rectangle x:Name="videoRectangle" Margin="0,0,0,0"> 
      <Rectangle.Fill> 
       <VideoBrush x:Name="viewfinderBrush" AlignmentX="Left" AlignmentY="Top" Stretch="UniformToFill"> 
        <VideoBrush.RelativeTransform> 
         <CompositeTransform x:Name="viewfinderTransform" 
              CenterX="0.5" CenterY="0.5"/> 
        </VideoBrush.RelativeTransform> 
       </VideoBrush>      
      </Rectangle.Fill> 
     </Rectangle> 

XAML.CS

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
    { 
     base.OnOrientationChanged(e); 

     if (e.Orientation == PageOrientation.LandscapeLeft) 
     {    //do nothing 
         //The videobrush orientation is currently right side up 
     } 
     if (e.Orientation == PageOrientation.Portrait) 
     { 
      //the videobrush is currently rotated 90 degrees counter clockwise 
      this.viewfinderTransform.Rotation = this.camera.Orientation + 90.0; 
     } 
     if (e.Orientation == PageOrientation.LandscapeRight) 
     { 
      //the videobrush is currently rotated 180 degrees counter clockwise 
      this.viewfinderTransform.Rotation = this.camera.Orientation + 180; 
     } 
    } 

E dopo aver aggiunto le dichiarazioni if, l'orientamento videobrush diventa ancora più folle. Che cosa sto facendo di sbagliato? Mi piacerebbe semplicemente avere il videobrush orientato verso l'alto, indipendentemente dall'orientamento del telefono.

+0

C'è qualcos'altro in corso oltre a quello che stai mostrando. XAML (senza codebehind) funziona come ci si aspetterebbe dall'emulatore e dal mio telefono. Anche se, non sono sicuro del motivo per cui stai usando un 'VisualBrush' per dipingere un' Rectangle', o fornire una trasformazione che centra un oggetto 'UniformToFill'. –

+1

this.viewfinderTransform.Rotation = this.camera.Orientation; questo non funziona? – TutuGeorge

+0

@Ritch Mi riferisco solo a qualche fonte MSDN che ho trovato per quanto riguarda la verniciatura di un oggetto (rettangolo) con un videobrush. Nel mio caso, UniformToFill funziona meglio perché non voglio alcuna differenza di larghezza e altezza quando ruoto il mio telefono tra verticale e orizzontale (ho notato che l'immagine di videobrush è allungata e schiacciata mentre lo fa), e UniformToFill dà la stessa perspettiva in tutto il rotazione del dispositivo. – Matthew

risposta

6

sto usando un semplice switch/case per ruotare adeguatamente il videobrush:

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
{ 
    base.OnOrientationChanged(e); 
    switch (e.Orientation) 
    { 
    case PageOrientation.Landscape: 
    case PageOrientation.LandscapeLeft: 
     videoBrushTransform.Rotation = 0; 
     break; 
    case PageOrientation.LandscapeRight: 
     videoBrushTransform.Rotation = 180; 
     break; 
    case PageOrientation.Portrait: 
    case PageOrientation.PortraitUp: 
     videoBrushTransform.Rotation = 90; 
     break; 
    case PageOrientation.PortraitDown: 
     videoBrushTransform.Rotation = 270; 
     break; 
    } 
} 

funziona bene per me.

+0

esattamente quello che ho usato :-) – noob

+0

grazie! voglio solo che mi serva questa mattina! –

Problemi correlati