0

RichTextBox コントロールの ScrollBar アニメーションを WPF を使用して C# .NET で実現する必要があります。

ボタンをクリックすると、アニメーションがテキストの最後に表示されるはずです。これには ScrollToEnd() メソッドを使用しますが、アニメーションの実行方法がわかりません。BeginAnimation() メソッドで試してみましたが、何も機能しませんでした。

あなたの誰かが何か考えを持っていたら、それは素晴らしいことです. ありがとう!

私のXAML:

<Window x:Class="TestWpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="177.811" Width="338.88">
<Grid Margin="0,0,2,-1">
    <RichTextBox x:Name="rtb" HorizontalAlignment="Left" Height="100" Margin="10,10,0,0" VerticalAlignment="Top" Width="319" ScrollViewer.VerticalScrollBarVisibility="Visible">
        <FlowDocument>
            <Paragraph>
                <Run Text="RichTextBoxR
                     ichTextBoxRichTextBoxRichTextBoxRic
                     hTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTe
                     xtBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRic
                     hTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextB
                     oxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRi
                     extBoxRichTextBoxRichTextBoxRichTextBoxRichTe
                     xtBoxRichTextBoxRichTextBoxRichTextBoxRichTextBoxRichTe
                     xtBoxRichTextBoxRich
                     TextBoxRichT
                     extBox"/>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>
    <Button Content="Button" HorizontalAlignment="Left" Margin="122,121,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
</Grid>

XAML.cs のボタン クリック メソッド:

private void Button_Click_1(object sender, RoutedEventArgs e) { rtb.ScrollToEnd(); }

どうもありがとう !よろしくお願いします。

4

1 に答える 1

1

わかりました私は解決策を見つけました。RichTextBox プロパティから新しいクラスを作成し、それを機能させるために Dependencyproperty を追加しました。

class ExtRichTextBox : RichTextBox
{
    public static DependencyProperty CurrentVerticalOffsetProperty =
        DependencyProperty.Register("CurrentVerticalOffset", typeof(double), typeof(ExtRichTextBox), new PropertyMetadata(new PropertyChangedCallback(OnVerticalChanged)));

    private static void OnVerticalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ExtRichTextBox extRtb = d as ExtRichTextBox;
        extRtb.ScrollToVerticalOffset((double)e.NewValue);
    }

    public double CurrentVerticalOffset
    {
        get { return (double)this.GetValue(CurrentVerticalOffsetProperty); }
        set { this.SetValue(CurrentVerticalOffsetProperty, value); }
    }
}

古いコントロールを新しいコントロールに置き換える必要があることを確認してから、ストーリーボードを使用してスクロールバーをアニメーション化します。

        private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        DoubleAnimation vertAnim = new DoubleAnimation();
        vertAnim.From = rtb.VerticalOffset;
        vertAnim.To = 100;
        vertAnim.DecelerationRatio = .2;
        vertAnim.Duration = new Duration(TimeSpan.FromMilliseconds(1000));
        Storyboard sb = new Storyboard();
        sb.Children.Add(vertAnim);
        Storyboard.SetTarget(vertAnim, rtb);
        Storyboard.SetTargetProperty(vertAnim, new PropertyPath(ExtRichTextBox.CurrentVerticalOffsetProperty));
        sb.Begin();
    }

vertAnim.To プロパティに指定された座標を置き換えるだけで、必要な位置でスクロールできます。

于 2013-06-21T12:24:02.143 に答える