我正在为 WinRT 中的触摸支持而苦苦挣扎。
我有一个包含 TextBlock 的框架的画布。TextBlock 可以有不同数量的文本,这会使 Frame 延伸到 Canvas 的底部下方。如果发生这种情况,我希望用户能够触摸 Frame 并将其向上移动,以便他们可以完成阅读文本。如果他们将 Frame 一直向上移动,则当 Frame 的底部距离 Canvas 底部的设定边距时,它应该停止。将其移回原处也是如此。使用 Inertia 功能也是首选。
如果有人可以提供一些指导,我将不胜感激。
我正在为 WinRT 中的触摸支持而苦苦挣扎。
我有一个包含 TextBlock 的框架的画布。TextBlock 可以有不同数量的文本,这会使 Frame 延伸到 Canvas 的底部下方。如果发生这种情况,我希望用户能够触摸 Frame 并将其向上移动,以便他们可以完成阅读文本。如果他们将 Frame 一直向上移动,则当 Frame 的底部距离 Canvas 底部的设定边距时,它应该停止。将其移回原处也是如此。使用 Inertia 功能也是首选。
如果有人可以提供一些指导,我将不胜感激。
我建议将 ScrollViewer 包裹在您的文本块周围,使用户能够在屏幕上滚动以查看所有文本。
<ScrollViewer>
<TextBlock Content="Very long content goes here" />
</ScrollViewer>
有关更多信息,请查看以下网站:
我想到了...
<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);
}