文本块中文本的水平自动滚动
本文关键字:文本 滚动 中文 水平 | 更新日期: 2023-09-27 18:28:57
我想要一个固定宽度的TextBlock
,它有长的、连续的、水平的文本,并且正在寻找一种允许用户读取所有文本的好方法。我想要一些比把控件放在ScrollViewer
中更复杂的东西。
第一个(理想的)选项是能够将鼠标悬停在TextBlock
上,例如,如果鼠标位于中心右侧,它将向右滚动(离中心越远,速度就越快)。我想这是可以做到的,通过处理TextBlock上的MouseEnter/MouseOver事件,弄清楚光标在TextBlock中的位置,并酌情启用一些字幕/动画。我正在寻找如何做到这一点的方法,特别是因为我在WPF中几乎没有动画经验。我想自己弄清楚细节,但很难开始。
第二个选项是在文本的两侧各有一个RepeatButton
,当您将鼠标悬停在它上面时,它会滚动文本。
首次尝试:
<RepeatButton ClickMode="Hover"
Command="{x:Static ComponentCommands.MoveLeft}"
CommandTarget="{Binding ElementName=TextAutoScroller}"
Content="Go left" />
<ScrollViewer x:Name="TextAutoScroller" Grid.Column="1"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Hidden">
<TextBlock VerticalAlignment="Center"
Text="The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog." />
</ScrollViewer>
<RepeatButton Grid.Column="2"
ClickMode="Hover"
Command="{x:Static ComponentCommands.ScrollPageRight}"
CommandTarget="{Binding ElementName=TextAutoScroller}"
Content="Go right" />
问题是两个RepeatButton
控件都被禁用了——似乎MoveLeft
和ScrollPageRight
都不受支持,但ScollPageDown
(对我的水平场景没有好处)工作正常吗?
任何关于这两种选择的提示或建议都将不胜感激!
对于可重复按钮版本,一个好的解决方案是只递增滚动滚动查看器。
private void scrollLeft_Click(object sender, RoutedEventArgs e)
{
sv.ScrollToHorizontalOffset(sv.HorizontalOffset - 10);
}
private void scrollRight_Click(object sender, RoutedEventArgs e)
{
sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 10);
}
上面假设您的文本被包装在一个名为sv的滚动查看器中,其中有两个repeatbutton。
如果你想加快你持有的时间:
private int offset = 1;
private int maxOffset = 50;
private void scrollLeft_Click(object sender, RoutedEventArgs e)
{
sv.ScrollToHorizontalOffset(sv.HorizontalOffset - offset);
offset += offset < maxOffset ? 1 : 0;
}
private void scrollRight_Click(object sender, RoutedEventArgs e)
{
sv.ScrollToHorizontalOffset(sv.HorizontalOffset + offset);
offset += offset < maxOffset ? 1 : 0;
}
private void scrollRight_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
offset = 1;
}
我也会权衡一下,建议不要使用ClickMode="悬停"。。。用户更习惯于点击按钮。只有我的两美分。