2012-03-26 19 views
2

固定幅のTextBlockを長めの壊れていない横書きのテキストにしたいと考えています。ユーザーがすべてのテキストを読むことを可能にする良い方法を探しています。私はちょうどScrollViewerの中にコントロールを置くよりも洗練されたものを求めています。TextBlock内のテキストの水平方向の自動スクロール

ファースト(理想の)オプションTextBlockの上にマウスを移動できるようにすることであるとマウスは例えば中央の右のであれば、それは右にスクロールう(上昇速度とあなたが中心から移動し、さらに)。 TextBlockのMouseEnter/MouseOverイベントを処理したり、カーソルがTextBlock内のどこにあるかを調べたり、適切なマーキー/アニメーションを有効にしたりすることで、これは可能です。私はこれを行う方法についてのアプローチを探しています。特に、WPFでのアニメーションの経験はほとんどありません。自分自身の詳細を把握したいが、始めるのに苦労する。

第2のオプションは、テキストの両側にRepeatButtonを持ち、その上にマウスを置くとテキストをスクロールします。

初期の試み:

<RepeatButton ClickMode="Hover" 
       Command="{x:Static ComponentCommands.MoveLeft}" 
       CommandTarget="{Binding ElementName=TextAutoScroller}" 
       Content="Go left" /> 

<ScrollViewer x:Name="TextAutoScroller" Grid.Column="1" 
       VerticalScrollBarVisibility="Disabled" 
       HorizontalScrollBarVisibility="Hidden"> 
    <TextBlock VerticalAlignment="Center" 
       Text="The quick brown fox jumps over the lazy dog.&#x0d;&#x0a;The quick brown fox jumps over the lazy dog.&#x0d;&#x0a;The quick brown fox jumps over the lazy dog." /> 
</ScrollViewer> 

<RepeatButton Grid.Column="2" 
       ClickMode="Hover" 
       Command="{x:Static ComponentCommands.ScrollPageRight}" 
       CommandTarget="{Binding ElementName=TextAutoScroller}" 
       Content="Go right" /> 

これに伴う問題は、両方のRepeatButtonコントロールが無効になっていることである - MoveLeftScrollPageRightどちらもサポートされているようですが、ScollPageDown(私の横シナリオには良いが)うまく動作しませんか?

いずれのオプションについてのヒントやご提案もありがとうございます。

+0

ツールチップ全体を表示しますか? – GazTheDestroyer

+0

ツールチップは私が今持っているものですが、この自動スクロールの概念を試してみたいと思います。 – Lyall

+1

私の意見ではありますが、オートスクロールは私にとって素晴らしい音ではありません。マウスを動かすだけで、私のディスプレイが邪魔になることはありません。 – GazTheDestroyer

答えて

1

繰り返し可能なボタンバージョンの良い解決策は、スクロールビューアを徐々にスクロールすることです。

private void scrollLeft_Click(object sender, RoutedEventArgs e) 
{ 
    sv.ScrollToHorizontalOffset(sv.HorizontalOffset - 10); 
} 

private void scrollRight_Click(object sender, RoutedEventArgs e) 
{ 
    sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 10); 
} 

上記は、テキストがsvというスクロールビューワに2つのリピートボタンでラップされていることを前提としています。

あなたが長くスピードアップしたい場合は、それを開催しました:

私も重量を量るうとClickMode =「ホバー」を使用していないことをお勧め
private int offset = 1; 
    private int maxOffset = 50; 

    private void scrollLeft_Click(object sender, RoutedEventArgs e) 
    { 
     sv.ScrollToHorizontalOffset(sv.HorizontalOffset - offset); 
     offset += offset < maxOffset ? 1 : 0; 
    } 

    private void scrollRight_Click(object sender, RoutedEventArgs e) 
    { 
     sv.ScrollToHorizontalOffset(sv.HorizontalOffset + offset); 
     offset += offset < maxOffset ? 1 : 0; 
    } 

    private void scrollRight_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     offset = 1; 
    } 

...ユーザーがクリックすると、より慣れていますボタン。ちょうど私の2セント。

関連する問題