刚学WPF,现在想实现以下功能:
   如,有3行文字,实现上翻,每次显示一条内容。请高手指点以下,最好给个代码。

解决方案 »

  1.   

    TranslateTransform
    代码还是留给你自己写吧
      

  2.   

    最简单的方法设置一个timer
    每过一段时间改变下texblock.text
      

  3.   

    类似office2010启动时的状态文字那样?
      

  4.   

    这是我写的,但是还没有满足我想要的,就是:2条数据连续出现。现在是第一次循环完后,就乱了。
    帮我看看哪里有问题。谢谢了。    <Canvas x:Name="a" VerticalAlignment="Top" Background="Black">
            <Canvas.Clip>
                <RectangleGeometry RadiusX="0" RadiusY="0" Rect="50,50, 300,24" />
            </Canvas.Clip>
            <Canvas.Triggers>
                <EventTrigger RoutedEvent="Canvas.Loaded" >
                    <BeginStoryboard>
                         <Storyboard x:Name="animation" Storyboard.TargetProperty="(Canvas.Top)" RepeatBehavior="Forever" >
                            <DoubleAnimation Storyboard.TargetName="txt1" From="60" To="14" Duration="0:0:10"  />
                        </Storyboard>
                    </BeginStoryboard>
                    <BeginStoryboard>
                        <Storyboard x:Name="animation2" Storyboard.TargetProperty="(Canvas.Top)" RepeatBehavior="Forever" >
                            <DoubleAnimation Storyboard.TargetName="txt2" From="60" To="14" Duration="0:0:10" BeginTime="0:0:5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Canvas.Triggers>
            <TextBlock x:Name="txt1" FontSize="36" Foreground="Green" Text="111111111111" Width="250" Height="40"/>
            <TextBlock x:Name="txt2" FontSize="36" Foreground="Green" Text="222222222222"  Width="250" Height="40"/>
        </Canvas>
      

  5.   


    <Canvas VerticalAlignment="Top" Height="46" ClipToBounds="True">
        <StackPanel Name="content1">
            <StackPanel.RenderTransform>
                <TranslateTransform Y="0" />
            </StackPanel.RenderTransform>
            <TextBlock FontSize="36" Foreground="Green" Text="111111111111" />
            <TextBlock FontSize="36" Foreground="Green" Text="222222222222" />
            <TextBlock FontSize="36" Foreground="Green" Text="333333333333" />
        </StackPanel>
        <Canvas.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation From="0" To="-138" Duration="0:0:5"
                                            RepeatBehavior="Forever"
                                            Storyboard.TargetName="content1" 
                                            Storyboard.TargetProperty="RenderTransform.Y" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Canvas.Triggers>
    </Canvas>
      

  6.   

    如果有多个内容要滚动显示,那么每次都要动态画多个TextBlock 吗?
    还是只画几个TextBlock ,然后动态修改其内容啊。
      

  7.   

    同为WPF新手,学习一下。
    另外顶nonocast大牛
      

  8.   


    互相学习
    在后台往content1里面加TextBlock即可
      

  9.   

    郁闷了,我用的是lable ,然后读取txt文档内容,用跑马灯效果显示txt文档内容。
    遇到一个问题,就是有没有办法根据读到的内容,让lable自动调整宽度。我好设置from 和 to 啊,让这段文字能刚好跑完。 我现在的做法是 取得文字的 字节数 * 字体大小 来设置lable宽度。这样不准啊。
    有没有 AoutSize 一样的属性啊。 或者怎么能计算出lable的宽度啊。
      

  10.   

    Binding Label的ActualHeight不就ok了
      

  11.   

    还是不行,看看下面:    <Grid>
            <Label  Height="32" Background="Red" HorizontalAlignment="Left" Name="marquee" VerticalAlignment="Top" Width="{Binding Path=ActualWidth}">
                <Label.RenderTransform>
                    <TranslateTransform x:Name="lab"/>
                </Label.RenderTransform>
            </Label >
            <Button Content="Button" Height="30" HorizontalAlignment="Left" Margin="60,203,0,0" Name="button1" VerticalAlignment="Top" Width="138" Click="button1_Click" />
        </Grid>        public void run()
            {
                this.marquee.Content = "!啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!";
                int intRuntime = 10;            DoubleAnimation animation = new DoubleAnimation();
                animation.Duration = TimeSpan.FromSeconds(intRuntime);
                animation.From = this.marquee.ActualWidth;
                animation.To = -this.marquee.ActualWidth;
                Storyboard.SetTargetName(animation, "lab");
                Storyboard.SetTargetProperty(animation, new PropertyPath(TranslateTransform.XProperty));            story.Duration = TimeSpan.FromSeconds(intRuntime);
                story.Children.Add(animation);            story.RepeatBehavior = RepeatBehavior.Forever;
                story.Begin(this);
            }        private void button1_Click(object sender, RoutedEventArgs e)
            {
                run();
            }