2013-03-24 4 views
0

WinRT에서 터치 지원에 어려움을 겪고 있습니다.WinRT에서 프레임을 위아래로 움직일 수 있습니까?

TextBlock이 포함 된 프레임이있는 Canvas가 있습니다. TextBlock은 Frame을 Canvas의 아래쪽으로 확장 할 수있는 다양한 양의 텍스트를 가질 수 있습니다. 이런 일이 발생하면 사용자가 프레임을 터치하고 위로 이동하여 텍스트 읽기를 완료 할 수 있기를 바랍니다. 프레임을 맨 위로 올리면 프레임의 맨 아래가 캔버스 아래쪽에서 설정된 여백에 멈춰야합니다. 그것을 아래로 다시 움직이기 위해 동일합니다. 관성 기능을 사용하는 것이 더 좋을 것입니다.

누군가가 어떤 방향을 제시 할 수 있다면, 고맙겠습니다.

답변

0

사용자가 텍스트 블록 주위에 ScrollViewer를 배치하여 화면에서 스크롤하여 모든 텍스트를 볼 수있게하는 것이 좋습니다.

<ScrollViewer> 
    <TextBlock Content="Very long content goes here" /> 
</ScrollViewer> 

추가 정보는 다음 사이트를 체크 아웃 :

Link to the scrollviewer in the control list

Link to the scrollviewer documentation

+0

될 것이라고 어떻게 전통을 비 터치 창 앱이 작동합니다. 터치 인터페이스는 그렇게 작동해서는 안됩니다. 사용자는 블록을 만져서 위아래로 움직여야합니다. –

+0

아마, 당신이 만드는 앱과 UI에 따라 달라질 것입니다. scrollviewer를 사용하기를 원하지만 스크롤 할 때 scrollbar UI가 마음에 들지 않는 경우에는 기본 템플릿을 변경하고 불투명도를 0으로 설정하여 숨길 수 있습니다. 반면 contentpresenter의 가시성은 그대로 유지됩니다. –

0

내가 그것을 알아 냈다가 ...

<Canvas x:Name="MainCanvas" ManipulationMode="TranslateRailsX" IsRightTapEnabled="False" IsDoubleTapEnabled="False" Margin="50,50,716,0" Width="600" ManipulationDelta="MainFrame_ManipulationDelta_1"> 
    <Canvas.RenderTransform> 
     <CompositeTransform x:Name="ScrollMain"></CompositeTransform> 
    </Canvas.RenderTransform> 
    <Frame x:Name="MainFrame" Background="Beige" Height="auto" Width="600"> 
     <RichTextBlock x:Name="MainContent" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="18" FontFamily="Segoe Script" Width="540" HorizontalAlignment="Left" Margin="30,10,0,10" Foreground="Black" Height="auto" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" IsTapEnabled="False" ManipulationMode="None" IsTextSelectionEnabled="False"/> 
    </Frame> 
</Canvas> 

MainCanvas.ManipulationMode = ManipulationModes.TranslateY | ManipulationModes.TranslateRailsY | ManipulationModes.TranslateInertia; 

private void MainFrame_ManipulationDelta_1(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    CompositeTransform transform = ScrollMain as CompositeTransform; 

    double yDelta = e.Delta.Translation.Y; 
    double bDelta = (MainFrame.ActualHeight - pageRoot.ActualHeight + MainCanvas.Margin.Top + MainCanvas.Margin.Top) * -1; 

    if (transform.TranslateY + yDelta > 0) 
    { 
     yDelta = transform.TranslateY * -1; 
    } 

    if (transform.TranslateY + yDelta < bDelta) 
    { 
     transform.TranslateY = bDelta; 
    } 
    else 
    { 
     transform.TranslateY += yDelta; 
    } 

    base.OnManipulationDelta(e); 
}   
+0

하나의 문제가 있습니다 ... 캔버스의 가장자리에서 프레임 만 이동할 수 있습니다 ... 텍스트 블록 영역을 터치해도 아무 일도 일어나지 않습니다. 그래서 텍스트 블록을 보낼 방법을 알아야합니다. 틀. –

관련 문제