2013-03-24 44 views
0

我在WinRT的觸摸支持方面苦苦掙扎。如何讓框架在WinRT中上下移動?

我有一個包含TextBlock的框架。 TextBlock可以有不同數量的文本,這可以使框架延伸到畫布底部以下。如果發生這種情況,我希望用戶能夠觸摸框架並將其向上移動,以便他們完成閱讀文本。如果他們一直向上移動框架,則當框架的底部距帆布底部的設定邊距時應該停止。將它向下移動也一樣。使用慣性功能也是首選。

如果有人可以提供一些方向,我會很感激。

回答

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

那會是怎樣一種傳統非觸摸窗口應用程序將工作。觸摸界面不應該這樣工作。用戶應該觸摸塊並上下移動。 – 2013-03-24 14:29:41

+0

我想,這實際上取決於你正在創建的應用和UI。如果想要使用滾動查看器,但不喜歡滾動時的滾動條UI,可以通過更改默認模板並將其設置爲不透明度爲0來隱藏它,同時保持contentpresenter的可見性。 – 2013-03-25 15:16:06

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

我確實有一個問題......我只能從畫布邊緣移動框架......如果我觸摸文本框區域,什麼都不會發生......所以我需要弄清楚如何將文本塊觸摸發送給幀。 – 2013-03-24 17:24:08