0

我正在为 WinRT 中的触摸支持而苦苦挣扎。

我有一个包含 TextBlock 的框架的画布。TextBlock 可以有不同数量的文本,这会使 Frame 延伸到 Canvas 的底部下方。如果发生这种情况,我希望用户能够触摸 Frame 并将其向上移动,以便他们可以完成阅读文本。如果他们将 Frame 一直向上移动,则当 Frame 的底部距离 Canvas 底部的设定边距时,它应该停止。将其移回原处也是如此。使用 Inertia 功能也是首选。

如果有人可以提供一些指导,我将不胜感激。

4

2 回答 2

0

我建议将 ScrollViewer 包裹在您的文本块周围,使用户能够在屏幕上滚动以查看所有文本。

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

有关更多信息,请查看以下网站:

链接到控制列表中的滚动查看器

链接到滚动查看器文档

于 2013-03-24T09:01:06.187 回答
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);
}        
于 2013-03-24T17:03:18.927 回答