none
이미지 회전시 이미지의 화면뷰 상태를 Uniform 하게 보여주려면... RRS feed

  • 질문

  • 안녕하세요 다람쥐이 입니다

    Image 를 RotateTransform 으로 90도 회전했을 때 현재 뷰에서 Uniform 하게 나타나게 하려면 어떻게 해야 하나요?(스샷3 처럼)

    아래의 코드를 사용하면 Landscape 에서는 원하는 결과를 얻을 수 있으나 Portrait 에서는 원하는 결과를 얻을 수 없네요. Portrait 에서도 동일한 결과를 얻으려면 뭔가 통일된 방식이 적용되야 할 것같은데요

    답변 부탁드립니다. 좋은 하루 되세요 ^^

    스샷1(원본)

    스샷2(현재 90도 회전했을 때 나타나는 상태)

    스샷3(90도 회전했을 때 원하는 결과)

    코드 조각 입니다

            <Image x:Name="imgPhoto" Stretch="Uniform" Source="{Binding MediaPath}"
                RenderTransformOrigin="0.5 0.5">
                <Image.RenderTransform>
                    <RotateTransform x:Name="ctPhoto"/>
                </Image.RenderTransform>
            </Image>

    void Rotate()

    {

                var applicationView = ApplicationView.GetForCurrentView();
                if (applicationView.IsFullScreen)
                {
                    if (applicationView.Orientation == ApplicationViewOrientation.Landscape)
                    {

                            ctPhoto.Rotation = angle;

                            if (angle == 90 || angle == 270)
                            {
                               imgPhoto.Width = this.ActualHeight;
                               imgPhoto.Height = this.ActualWidth;
                            }
                            else
                            {
                                imgPhoto.Width = this.ActualWidth;
                                imgPhoto.Height = this.ActualHeight;
                            }

                   }

                    else

                    {

                                  ....

                    }

            }

    }





    • 편집됨 Squirrel Lee 2014년 3월 25일 화요일 오전 6:57
    2014년 3월 25일 화요일 오전 6:54

답변

  • 위에는 다른 방법을 가져다가 쓰시려고 가져오셨나보네요. 전체 소스가 아니라서 제가 좀 보기가 어렵고요,

    저번에 주셨던 것이 있으니 거기에 이렇게 한번 해보시죠.

    지난 번에 제가 드렸던 링크의 코드에서 App.xaml를 다음과 같이 템플릿 하나로  SizeChanged 이벤트 핸들러만 추가하시면 됩니다.

    http://social.msdn.microsoft.com/Forums/ko-KR/97bb2fdf-fb22-4493-a630-ec4c4753b7b5/flipview-uniform-?forum=winappswithcsharpkr

    App.xaml

    <Application
        x:Class="App49.App"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App49">
        
        <Application.Resources>
            <local:WidthConverter x:Key="wc" />
            <local:HeightConverter x:Key="hc" />
            <DataTemplate x:Key="FlipViewDataTemplate">
                <ScrollViewer x:Name="svPhotos"
            		    ZoomMode="Enabled" 
            		    HorizontalScrollMode="Auto"
            		    VerticalScrollMode="Auto"
            		    VerticalSnapPointsType="None"
            		    HorizontalSnapPointsType="None"
            		    HorizontalScrollBarVisibility="Auto"
            		    VerticalScrollBarVisibility="Auto"
            		    MinZoomFactor="1"            
            		    MaxZoomFactor="3.5" HorizontalContentAlignment="Center">
                    <Grid>
                        <Image Stretch="Uniform" Source="{Binding ImagePath}"
                               Width="{Binding Converter={StaticResource wc}}" Height="{Binding Converter={StaticResource hc}}"/>
                    </Grid>
                </ScrollViewer>
            </DataTemplate>
        </Application.Resources>
    
    </Application>

    그리고 MainPage.xaml.cs에 SizeChange 이벤트 핸들러 추가

    namespace App49
    {
        ...
    
        /// <summary>
        /// 자체에서 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
                Loaded += MainPage_Loaded;
                Unloaded += MainPage_Unloaded;
    
                Window.Current.SizeChanged += Window_SizeChanged;
            }
    
            private void Window_SizeChanged(object sender, WindowSizeChangedEventArgs e)
            {
                object template = null;
    
                Application.Current.Resources.TryGetValue("FlipViewDataTemplate", out template);
                
                flipView.ItemTemplate = (DataTemplate)template;
            }
    
            ....
        }
    }

    저번에 공유하셨던 소스에서 잘 동작합니다.

    • 답변으로 표시됨 Jina Lee 2014년 4월 4일 금요일 오전 4:55
    2014년 3월 26일 수요일 오전 3:00