c# UWP 自动滚动文本
c# UWP autoscrolling text
我目前正在为 raspberry Pi(windows 物联网)构建一个应用程序,它接受 UDP 消息并将它们显示在屏幕上。
我需要一种让文本自动水平滚动屏幕的方法。我不能让用户点击按钮,因为没有输入设备连接到 Pi。
到目前为止,我一直在玩弄滚动查看器并手动调整它的 HorizontalAlignment 值,但无济于事(我对整个 UWP/XAML 有点陌生)。
任何人都可以给我一些代码,使文本块中的文本自动从右向左滚动(很像文本在数字显示器上滚动的方式),并且不会中断任何其他代码 运行 在应用程序中(接收 udp 消息并勾选计时器)?
非常感谢。
看到这个post:
Multiline Textbox with automatic vertical scroll
将 TextBlock 替换为只读 TextBox,这样您就可以在每次更新其内容时以编程方式滚动到末尾。
您可以在 ScrollViewer
中设置 TextBlock
这样它就可以滚动,例如:
<ScrollViewer x:Name="scrollviewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden"
VerticalScrollMode="Disabled" HorizontalScrollMode="Enabled" Grid.Row="1" Loaded="scrollViewer_Loaded"
Unloaded="scrollviewer_Unloaded">
<TextBlock Text="Start:111fdafdilgklnkghiogj2222213135aaaadjiosfuiafkhafuia464676541134564132145546afafkjarpikfsanjahfnvfnvjkhghga:End" TextWrapping="NoWrap"
FontSize="40" />
</ScrollViewer>
并在后面的代码中使用 DispatcherTimer
设置滚动计时器,在 ScrollViewer
的 Loaded event
中启动此计时器并在 Unloaded event
的ScrollViewer
停止此计时器:
private void scrollViewer_Loaded(object sender, RoutedEventArgs e)
{
timer.Tick += (ss, ee) =>
{
if (timer.Interval.Ticks == 300)
{
//each time set the offset to scrollviewer.HorizontalOffset + 5
scrollviewer.ScrollToHorizontalOffset(scrollviewer.HorizontalOffset + 5);
//if the scrollviewer scrolls to the end, scroll it back to the start.
if (scrollviewer.HorizontalOffset == scrollviewer.ScrollableWidth)
scrollviewer.ScrollToHorizontalOffset(0);
}
};
timer.Interval = new TimeSpan(300);
timer.Start();
}
private void scrollviewer_Unloaded(object sender, RoutedEventArgs e)
{
timer.Stop();
}
注意到您的应用程序适用于 raspberry Pi,刚刚在 RP2 OS 版本 10.0.14376.0 上测试了这段代码,它工作正常。
我目前正在为 raspberry Pi(windows 物联网)构建一个应用程序,它接受 UDP 消息并将它们显示在屏幕上。
我需要一种让文本自动水平滚动屏幕的方法。我不能让用户点击按钮,因为没有输入设备连接到 Pi。
到目前为止,我一直在玩弄滚动查看器并手动调整它的 HorizontalAlignment 值,但无济于事(我对整个 UWP/XAML 有点陌生)。
任何人都可以给我一些代码,使文本块中的文本自动从右向左滚动(很像文本在数字显示器上滚动的方式),并且不会中断任何其他代码 运行 在应用程序中(接收 udp 消息并勾选计时器)?
非常感谢。
看到这个post: Multiline Textbox with automatic vertical scroll
将 TextBlock 替换为只读 TextBox,这样您就可以在每次更新其内容时以编程方式滚动到末尾。
您可以在 ScrollViewer
中设置 TextBlock
这样它就可以滚动,例如:
<ScrollViewer x:Name="scrollviewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden"
VerticalScrollMode="Disabled" HorizontalScrollMode="Enabled" Grid.Row="1" Loaded="scrollViewer_Loaded"
Unloaded="scrollviewer_Unloaded">
<TextBlock Text="Start:111fdafdilgklnkghiogj2222213135aaaadjiosfuiafkhafuia464676541134564132145546afafkjarpikfsanjahfnvfnvjkhghga:End" TextWrapping="NoWrap"
FontSize="40" />
</ScrollViewer>
并在后面的代码中使用 DispatcherTimer
设置滚动计时器,在 ScrollViewer
的 Loaded event
中启动此计时器并在 Unloaded event
的ScrollViewer
停止此计时器:
private void scrollViewer_Loaded(object sender, RoutedEventArgs e)
{
timer.Tick += (ss, ee) =>
{
if (timer.Interval.Ticks == 300)
{
//each time set the offset to scrollviewer.HorizontalOffset + 5
scrollviewer.ScrollToHorizontalOffset(scrollviewer.HorizontalOffset + 5);
//if the scrollviewer scrolls to the end, scroll it back to the start.
if (scrollviewer.HorizontalOffset == scrollviewer.ScrollableWidth)
scrollviewer.ScrollToHorizontalOffset(0);
}
};
timer.Interval = new TimeSpan(300);
timer.Start();
}
private void scrollviewer_Unloaded(object sender, RoutedEventArgs e)
{
timer.Stop();
}
注意到您的应用程序适用于 raspberry Pi,刚刚在 RP2 OS 版本 10.0.14376.0 上测试了这段代码,它工作正常。