0

スクロールするテキストのアニメーションを作成するユーザーコントロールがあり、メインウィンドウでは次のように呼び出します。

xmlns:mar="clr-namespace:WpfApplication4.AppPages"
<mar:Feed Background="DarkGray" FontSize="12" MarqueeTimeInSeconds="8" 
          Foreground="Gray" Margin="7,383,711,6" MarqueeContent="Live Feed" 
          MarqueeType="TopToBottom"></mar:Feed>

ユーザーコントロールのコードは次のようになります。

    MarqueeType _marqueeType;

    public MarqueeType MarqueeType
    {
        get { return _marqueeType; }
        set { _marqueeType = value; }
    }       

    public String MarqueeContent
    {
        set { tbmarquee.Text = value; }
    }

    private double _marqueeTimeInSeconds;

    public double MarqueeTimeInSeconds
    {
        get { return _marqueeTimeInSeconds; }
        set { _marqueeTimeInSeconds = value; }
    }

    public Feed()
    {
        InitializeComponent();
        canMain.Height = this.Height;
        canMain.Width = this.Width;
        this.Loaded += new RoutedEventHandler(Feed_Loaded);
    }

    void Feed_Loaded(object sender, RoutedEventArgs e)
    {
        StartMarqueeing(_marqueeType);
    }

    public void StartMarqueeing(MarqueeType marqueeType)
    {
            TopToBottomMarquee();
    }

    private void TopToBottomMarquee()
    {
        double width = canMain.ActualWidth - tbmarquee.ActualWidth;
        tbmarquee.Margin = new Thickness(width / 2, 0, 0, 0);
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = -tbmarquee.ActualHeight;
        doubleAnimation.To = canMain.ActualHeight;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
        tbmarquee.BeginAnimation(Canvas.TopProperty, doubleAnimation);
    }

public enum MarqueeType
{
    TopToBottom
}

メインウィンドウでMarqueeContent="Live Feed"xamlをそのように設定しましたが、コードビハインドでコンテンツを設定するにはどうすればよいですか?また、複数のMarqueeContentsを設定するにはどうすればよいですか?

たとえば、コードビハインドからMarqueeContentを設定でき、複数のアイテムを追加したとしても、今読んでいるテキストのように次々に追加することは間違いありません。追加する各アイテムにそれが理にかなっている場合は、少なくとも段落間隔。

視覚的なアイデアを与えるために、ここ(TopDown)でそれを見ることができます:

http://www.codeproject.com/Articles/48267/Making-a-Simple-Marquee-Text-Control-Drip-Animatio

複数の文字列をロードできるようにするために必要です。また、追加されたテキストの各文字列は段落で区切られています。

4

1 に答える 1

1

1つの移動ブロックに複数行のテキストを追加するだけの場合は、行の間に改行を追加するだけです。

textBlock.Text = "A line of text.\n\nAnother line of text.";

または、インラインで同じことを行うことができます:

textBlock.Inlines.Add(new Run("A line of text."));
textBlock.Inlines.Add(new LineBreak());
textBlock.Inlines.Add(new LineBreak());
textBlock.Inlines.Add(new Run("Another line of text."));
于 2012-04-21T11:32:09.043 に答える