5

ビデオブラシの向きを電話の向きに合わせようとしていますが、このソリューションの実装に問題があります。私の xaml ページは PortraitOrLandscape に設定されており、携帯電話の向きに関係なく、ビデオブラシを正しく表示したいと考えています。onOrentationChanged イベントに向きを変える if 文を追加する前に、次のような状況が発生しています。

Phone: 横向き左、Videobrush: 右向き

電話: ポートレート、ビデオブラシ、時計回りに -90 度回転

電話: 横向き右、Videobrush、時計回りに -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;
        }
    }

そして、if ステートメントを追加した後、ビデオブラシの向きはさらにクレイジーになります。私は何を間違っていますか?電話の向きに関係なく、ビデオブラシを正しい向きにしたいだけです。

4

1 に答える 1

6

ビデオブラシを適切に回転させるために、単純なスイッチ/ケースを使用しています。

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;
  }
}

私にとってはうまく機能します。

于 2012-06-12T10:25:22.697 に答える