none
아래 질문의 추가 질문 입니다 ^^ RRS feed

  • 질문

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

    좋은 아이디어 인데요 ^^

    지금 적용해보고 있는데 앱실행시 Landscape 나 Portrait 상태에서는 DataTemplateSelector 에 의해서

    정삭 작동되는데 

    앱 실행 후 Landscape 에서 Portrait 상태로 화면뷰가 전환될 때 DataTemplateSelector 클래스의

    SelectTemplateCore 메서드가 실행이 되지 않아서 Portrait 상태의 Template 이 적용이 안됩니다 

    C# 코드에서 화면뷰가 전환될 때 템플릿을 변경하기위한 코드가 들어가야 할 것 같은데

    FlipView 의 템플릿을 다시 적용하게 하는 방법을 모르겠습니다 

    참고로 예전에 WPF 에서는 ListBox 의 컨트롤의 경우 list.Items.Refresh()

    라는 메서드가 있어서 C# 코드에서 템플릿을 다시 적용하게 할 수 있었던 걸로 기억하는데

    FlipView 에는 동일한 메서드가 없네요

    혹시 아신다면 답변 부탁드립니다

    private void Window_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)

    {

                if (!UsingLogicalPageNavigation())
                {
                    var applicationView = ApplicationView.GetForCurrentView();
                    if (applicationView.IsFullScreen)
                    {
                        if (applicationView.Orientation == ApplicationViewOrientation.Landscape)
                        {
                            //flipView.InvalidateMeasure();
                            //flipView.UpdateLayout();

                            // 여기에 flipView 컨트롤 템플릿을 초기화해서 FlipVewDataTemplete 이

                            // 적용되게 해야할 것 같아요

                            return "FullScreenLandscape";
                        }
                        else
                        {
                            //flipView.InvalidateMeasure();
                            //flipView.UpdateLayout();

                            // 여기에 flipView 컨트롤 템플릿을 초기화해서 FlipVewDataTempletePortrait

                            // 이 적용되게 해야할 것 같아요

                            return "FullScreenPortrait";
                        }
                    }
                }

    }



    • 편집됨 Squirrel Lee 2014년 3월 19일 수요일 오전 2:45
    2014년 3월 19일 수요일 오전 2:42

답변

  • 그럼 이 처리는 코드 비하인드에서 하기보다는 MainPage.xaml에서 VisualState를 이용하시는 것이 어떨는지요. 처음에 제안하려다가 다른 소스가 있고 뷰 모드 등이 다 지원된다고 하셔서 회전에 대한 아이디어도 따로 있다고 생각하고 말씀을 안 드렸는데, 적용 가능하신지는 모르겠네요.

    대략 아래와 같은 폼에서 FullScreenPortrait일 때 Portrait 모드에 맞는 템플릿을 적용하도록 하는 겁니다. 아래 내용은 예제라 내용은 필요 없으실 것이고, VisualState 활용법만 참고하세요.

    <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="ApplicationViewStates">
                    <VisualState x:Name="FullScreenLandscape"/>
                    <VisualState x:Name="Filled"/>
    
                    <!-- 아마 여기쯤에 넣으시면 될 것 같습니다 -->
                    <VisualState x:Name="FullScreenPortrait"/>
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="backButton" Storyboard.TargetProperty="Style">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PortraitBackButtonStyle}"/>
                            </ObjectAnimationUsingKeyFrames>
    
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemGridView" Storyboard.TargetProperty="Padding">
                                <DiscreteObjectKeyFrame KeyTime="0" Value="96,137,10,56"/>
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Snapped">
                        <Storyboard>
                            <!-- Snapped 모드 처리 -->
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>

    VisualState class

    http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.visualstate.aspx


    2014년 3월 19일 수요일 오전 8:58