高效的字幕文本控制

时间:2014-06-09 18:05:23

标签: c# wpf wpf-controls marquee

在我们的WPF应用程序中,我们需要一个简单的字幕文本控件,它在性能方面轻巧高效。我尝试使用DoubleAnimation但是它使用了大量资源(主要来自CPU)。我还尝试设置TextBlock的Text属性,并从每100纳秒开始删除一个字符。这也没有提升表现 那么在WPF中设计字幕文本控件的最佳和最有效的方法是什么? (我们正在使用.Net 4.0)

1 个答案:

答案 0 :(得分:1)

感谢@Chris W.和this question这是我最终提出的(我想要从rtl语言的左到右动画):

<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication9"
        Title="MainWindow" Height="83" Width="222">
    <Grid x:Name="layoutRoot">
        <Canvas x:Name="canvas">
            <TextBlock Text="StackOverflow is just awesome!" FontSize="25"  x:Name="tb1" Canvas.Left="-131" Loaded="tb1_Loaded">
                <TextBlock.Resources>
                    <Storyboard x:Key="slide">
                        <DoubleAnimation From="0" To="{Binding Width, ElementName=tb1}" Duration="00:00:4"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferCurreny"
                      RepeatBehavior="Forever"/>
                    </Storyboard>
                </TextBlock.Resources>
                <TextBlock.RenderTransform>
            <TranslateTransform x:Name="transferCurreny" X="0"/>
        </TextBlock.RenderTransform>
                <TextBlock.Triggers>
                    <EventTrigger RoutedEvent="TextBlock.Loaded">
                        <BeginStoryboard Storyboard="{StaticResource slide}" />
                    </EventTrigger>
                </TextBlock.Triggers>
            </TextBlock>
        </Canvas>
    </Grid>
</Window>

代码隐藏:

using System.Windows;

namespace WpfApplication9
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void tb1_Loaded(object sender, RoutedEventArgs e)
        {
            tb1.Width = tb1.ActualWidth;
        }
    }
}