您好
我是WPF的新手,我正在寻找一个在WPF应用程序中滚动文本的解决方案,
我尝试了一些动画,但我有剪辑问题
我在以下地方找到了解决问题的可能方法:
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8330696e-7715-479e-8027-8d9925579a17/
但我不清楚变量TranslateTransformName,scrollfactor和tt应该是什么..
有人可以看一下代码并帮我弄清楚吗?
谢谢
沃利
这是代码:Code Block
<p class=MsoNoSpacing><
<span class=SpellE>Viewbox</span>
<span class=SpellE>OpacityMask</span> ="{x
<span
class=GramE>:Null</span> }"
<span class=SpellE>HorizontalAlignment</span> ="Center"
<span class=SpellE>VerticalAlignment</span> ="Stretch"
Width="Auto" Height="Auto"
<span class=SpellE>RenderTransformOrigin</span> ="0.5,0.5"
x:Name="container" Stretch="Uniform"
<span class=SpellE>StretchDirection</span> ="Both">
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> <
<span
class=SpellE>Viewbox.RenderTransform</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> <
<span
class=SpellE>TransformGroup</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>ScaleTransform</span>
<span class=SpellE>ScaleX</span> ="1"
<span class=SpellE>ScaleY</span> ="1"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>SkewTransform</span>
<span class=SpellE>AngleX</span> ="0"
<span class=SpellE>AngleY</span> ="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>RotateTransform</span> Angle="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>TranslateTransform</span> X="640"
Y="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> </
<span
class=SpellE>TransformGroup</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> </
<span
class=SpellE>Viewbox.RenderTransform</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> <
<span
class=SpellE>TextBlock</span>
<span class=SpellE>RenderTransformOrigin</span> ="0.5
<span
class=GramE>,0.5</span> "
<span class=SpellE>HorizontalAlignment</span> ="Center"
x:Name="
<span class=SpellE>tb</span> "
<span class=SpellE>VerticalAlignment</span> ="Center"
Width="Auto" Height="Auto"
<span class=SpellE>FontSize</span> ="50"
<span class=SpellE>TextWrapping</span> ="
<span class=SpellE>NoWrap</span> "
Background="{x:Null}" Foreground="#FFFFFFFF"
Padding="0,0,0,10" Text="0">
</p>
<p class=MsoNoSpacing></p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> <
<span
class=SpellE>TextBlock.RenderTransform</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>TransformGroup</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>ScaleTransform</span>
<span class=SpellE>ScaleX</span> ="1"
<span class=SpellE>ScaleY</span> ="1"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>SkewTransform</span>
<span class=SpellE>AngleX</span> ="0"
<span class=SpellE>AngleY</span> ="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>RotateTransform</span> Angle="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> <
<span class=SpellE>TranslateTransform</span> X="640"
Y="0"/>
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'>
</span> </
<span class=SpellE>TransformGroup</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> </
<span
class=SpellE>TextBlock.RenderTransform</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> </
<span
class=SpellE>TextBlock</span> >
</p>
<p class=MsoNoSpacing>
<span style='mso-spacerun:yes'></span> </
<span
class=SpellE>Viewbox</span> >
</p>
<p class=MsoNoSpacing>
<o:p> </o:p>
</p>
<p class=MsoNoSpacing>
<o:p> </o:p>
</p>
<p class=MsoNoSpacing>
<o:p> </o:p>
</p>
<p class=MsoNoSpacing>
<o:p> </o:p>
</p>
Code Block private void StartAnimation(object sender,EventArgs e){tb.Text = news;
MainWindow.UpdateLayout();
Double timeToTake = (MainWindow.Width + tb.ActualWidth) / scrollfactor;
this.tb.RenderTransform = tt;
Storyboard sb = new Storyboard();
DoubleAnimation daX = new DoubleAnimation(MainWindow.Width, (0.0 - tb.ActualWidth), new Duration(TimeSpan.FromSeconds(timeToTake)));
daX.RepeatBehavior = RepeatBehavior.Forever;
Storyboard.SetTargetName(daX, TranslateTransformName);
Storyboard.SetTargetProperty(daX, new PropertyPath(TranslateTransform.XProperty));
sb.Children.Add(daX);
sb.Begin(this.tb);
}
3 回答
http://jobijoy.blogspot.com/2008/08/wpf-custom-controls-marquee-control.html
你可以检查这个Marquee控件背后的想法 . 当你说要在textBlock中滚动文本时..想想在marqueee控件中滚动一个长文本块 . 此控件是一个ContentControl,可以滚动内部的任何内容 .
这是一个完整的样本 - 验证它是否有效 . 我修改了source posted here by Philipsh(对控件布局进行了微小的更改以使其更具代表性)
我有点跳过编程WPF中的动画章节 . 所以我无法解释它是如何运作的......这本书还没有到手 . 如果我试图发布答案,我会充其量猜测..
XAML
Button Click事件处理程序
您可以使用以下代码滚动文本块:
在这种情况下,隐藏垂直滚动条,您可以放置自定义按钮来向上和向下滚动文本块 .