c# UWP 自动滚动文本

c# UWP autoscrolling text

我目前正在为 raspberry Pi(windows 物联网)构建一个应用程序,它接受 UDP 消息并将它们显示在屏幕上。

我需要一种让文本自动水平滚动屏幕的方法。我不能让用户点击按钮,因为没有输入设备连接到 Pi。
到目前为止,我一直在玩弄滚动查看器并手动调整它的 Horizo​​ntalAlignment 值,但无济于事(我对整个 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 设置滚动计时器,在 ScrollViewerLoaded event 中启动此计时器并在 Unloaded eventScrollViewer 停止此计时器:

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 上测试了这段代码,它工作正常。