gpt4 book ai didi

c# - TextBlock 中文本的水平自动滚动

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:15 24 4
gpt4 key购买 nike

我想要一个固定宽度的 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.&#x0d;&#x0a;The quick brown fox jumps over the lazy dog.&#x0d;&#x0a;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 的滚动查看器中,有两个 repeatbuttons。

如果你想加快你坚持的时间:

    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="Hover"... 用户更习惯于单击按钮。只是我的两分钱。

关于c# - TextBlock 中文本的水平自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com