基本上,我正在开发一个记笔记应用程序,用户可以随意输入(有点像WP7 中的可滚动文本框 https://stackoverflow.com/questions/5576691/scrollable-textbox-in-wp7)。我将 TextBox 放入 ScrollViewer 中,一切都很好;当 TextBox 获得焦点时,我禁用 ScrollViewer,因此它会在用户键入时自动滚动。
我的问题是,我希望用户能够在编辑注释时滚动,就像他能够在阅读注释时滚动一样。我认为做到这一点的唯一方法是按住直到出现超大插入符号,然后移动它,但我发现,事实上,第三方应用程序支持这种类型的滚动。
我想要实现的是类似于手机上的Word/OneNote,用户可以在编辑文档时轻松滚动(证明它)。在 Skype 和 Facebook 应用程序中也可以看到同样的效果,在编写消息时,您可以滚动它以查看更多内容。
我想知道这是否是一个自定义控件,或者布局是否是以特定方式设计的,因为 ScrollViewer 内的 TextBox 根本不起作用。
我将不胜感激任何帮助。提前致谢。
根据 Ku6opr 给出的答案,我调整了代码,使其可以在我的情况下运行。现在,TextBox 具有正常行为,但可以滚动,并且 RootFrame 不会自动上升。
XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ScrollViewer x:Name="InputScrollViewer">
<TextBox x:Name="MessageText" TextWrapping="Wrap" Text="" AcceptsReturn="True" TextChanged="inputText_TextChanged" GotFocus="MessageText_GotFocus" Padding="0,0,0,400" Tap="MessageText_Tap" />
</ScrollViewer>
</Grid>
C#:
public partial class MainPage : PhoneApplicationPage
{
double InputHeight = 0.0;
// Constructor
public MainPage()
{
InitializeComponent();
}
private void MessageText_GotFocus(object sender, System.Windows.RoutedEventArgs e)
{
(App.Current as App).RootFrame.RenderTransform = new CompositeTransform();
}
private void inputText_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
double CurrentInputHeight = MessageText.ActualHeight;
if (CurrentInputHeight > InputHeight)
{
InputScrollViewer.ScrollToVerticalOffset(InputScrollViewer.VerticalOffset + CurrentInputHeight - InputHeight);
}
InputHeight = CurrentInputHeight;
});
}
public void MessageText_Tap(object sender, GestureEventArgs e)
{
InputScrollViewer.ScrollToVerticalOffset(e.GetPosition(MessageText).Y - 80);
}
}
Tap 事件处理程序检测点击的垂直位置,并滚动 ScrollViewer,以便当 TextBox 获得焦点时可以看到插入符号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)