C# UWP自动滚动文本

6
我目前正在为树莓派(Windows IoT)构建一个应用程序,它可以接收UDP消息并在屏幕上显示它们。
我需要一种自动使文本水平滚动的方法。由于没有连接到Pi的输入设备,所以不能让用户点击按钮。
到目前为止,我一直在尝试使用scrollviewer并手动调整其HorizontalAlignment值,但是一直没有成功(我对整个UWP / XAML的东西还比较新)。
有人能向我展示一些代码,使得textblock中的文本自动从右向左滚动(就像数字显示器上的文本滚动那样),而不会中断应用程序中运行的任何其他代码(接收UDP消息和计时器)吗?
非常感谢。

1
你能包含一些你已经尝试过的代码吗?此外,只需谷歌“水平滚动文本xaml”就可以获得大量的代码和教程...请参阅http://stackoverflow.com/help/how-to-ask以获取有关如何提出好问题的更多信息。 - Geoff James
1
这个解决方法同样适用于UWP:http://mikaelkoskinen.net/post/winrt-xaml-automatically-scrolling-listview-to-bottom-and-detecting-when-listview-is-scrolled - Kinani
2个回答

11
你可以将 TextBlock 放在一个 ScrollViewer 内,这样就可以像下面这样滚动它:
<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事件中启动此计时器,在ScrollViewerUnloaded事件中停止此计时器:

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();
}

我注意到您的应用是针对树莓派的,我刚在树莓派2(RP2)上测试了这段代码,操作系统版本为10.0.14376.0,结果正常。


我只是在寻找这个功能,我能否设置它首先垂直滚动,然后水平滚动,再次首先垂直和水平滚动或同时进行? - Shubham Sahu

0

你在 UWP 应用程序中测试过这个 WPF 方法吗? - Grace Feng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接