gpt4 book ai didi

wpf - WPF中的连续文本代码

转载 作者:行者123 更新时间:2023-12-04 18:08:05 26 4
gpt4 key购买 nike

golang golang golang golang golang golang golang golang golang golang golang golang

我正在 WPF 中创建一个文本自动收报机。我可以永远将文本从右向左移动,但我的问题是,我想无缝移动相同的文本以创建上述效果(就像证券交易所股票代码一样)。上面的文字必定无止境。

我怎样才能实现它?

最佳答案

因此,通过阅读您的问题,我不确定您想要什么。您是否想要一个文本,滚动出文本框并重新开始,就像大多数选取框控件/功能一样。

或者你想要一些在你的文本框中一遍又一遍地运行的文本,从头到尾填写?然后使用无法检测的给定循环? :)

后面的代码:

//单行动画。

private void LeftToRightMarqueeOnTextBox()
{
string Copy = " "+TextBoxMarquee.Text;
double TextGraphicalWidth = new FormattedText(TextBoxMarquee.Text, System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, new Typeface(TextBoxMarquee.FontFamily.Source), TextBoxMarquee.FontSize, TextBoxMarquee.Foreground).WidthIncludingTrailingWhitespace;
//BorderTextBoxMarquee.Width = TextGraphicalWidth + 5;

ThicknessAnimation ThickAnimation = new ThicknessAnimation();
ThickAnimation.From = new Thickness(TextBoxMarquee.ActualWidth, 0, 0, 0);
ThickAnimation.To = new Thickness(-TextGraphicalWidth, 0, 0, 0);
ThickAnimation.RepeatBehavior = RepeatBehavior.Forever;
ThickAnimation.Duration = new Duration(TimeSpan.FromSeconds(3));
TextBoxMarquee.BeginAnimation(TextBox.PaddingProperty, ThickAnimation);
}

或者

//没有间隙的句子重复动画。
string Copy = " "+TextBoxMarquee.Text;
double TextGraphicalWidth = new FormattedText(Copy, System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, new Typeface(TextBoxMarquee.FontFamily.Source), TextBoxMarquee.FontSize, TextBoxMarquee.Foreground).WidthIncludingTrailingWhitespace;
double TextLenghtGraphicalWidth = 0;
//BorderTextBoxMarquee.Width = TextGraphicalWidth + 5;
while (TextLenghtGraphicalWidth < TextBoxMarquee.ActualWidth)
{
TextBoxMarquee.Text += Copy;
TextLenghtGraphicalWidth = new FormattedText(TextBoxMarquee.Text, System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, new Typeface(TextBoxMarquee.FontFamily.Source), TextBoxMarquee.FontSize, TextBoxMarquee.Foreground).WidthIncludingTrailingWhitespace;
}
TextBoxMarquee.Text += " "+TextBoxMarquee.Text;
ThicknessAnimation ThickAnimation = new ThicknessAnimation();
ThickAnimation.From = new Thickness(0, 0, 0, 0);
ThickAnimation.To = new Thickness(-TextGraphicalWidth, 0, 0, 0);
ThickAnimation.RepeatBehavior = RepeatBehavior.Forever;
ThickAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));
TextBoxMarquee.BeginAnimation(TextBox.PaddingProperty, ThickAnimation);

XAML:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Canvas ClipToBounds="True" Name="canMain" Background="Transparent">
<Grid Width="{Binding ElementName=canMain, Path=ActualWidth}" >
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Name="TextBlockMarquee" Text="This is my animated text" />
<Border Grid.Row="1" BorderBrush="Black" BorderThickness="1">
<TextBox ClipToBounds="True" Name="TextBoxMarquee" Text="lars er en god skakspiller, der tænker længere end de andre" BorderBrush="Transparent"/>
</Border>
</Grid>
</Canvas>
</Grid>

基本上忽略大部分 XAML。重要的是文本框中文本的长度。还没有找到通用的解决方案,这就是为什么我的 From Thickness 是基于数字的。

但只需要确保这就是您要找的东西:)

编辑/更新:

所以现在试试吧,我已经更新了代码..希望它有效,但从一些测试来看,它看起来像:) 你唯一需要确定的是整个文本框都被填满了,然后我'我做一个副本,我将从字符串图形长度中循环两个文本:)(

编辑/更新:
我已经添加了我的最终解决方案,希望这对您有所帮助。

编辑/更新

忘记更新我的重复解决方案,所以它没有切断并使循环可见..现在完成:)

关于wpf - WPF中的连续文本代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929344/

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