2012-03-26 78 views
2

自動滾動我想有一個固定寬度的TextBlock有長期的,不間斷的,橫排文字,並正在尋找一個好方法,以允許由用戶閱讀所有的文字。我想要一些更復雜的東西,而不僅僅是將控件放在ScrollViewer之內。水平文本在TextBlock中

第一(理想)選項是能夠在鼠標移到TextBlock懸停和鼠標是否正確中心例如,它會滾動到右側(與增加的速度,你從中心移動進一步)。我想這是做,能,通過處理的MouseEnter /鼠標懸停事件的TextBlock的,搞清楚光標TextBlock的範圍內,並且使一些字幕/動畫作爲爲宜。我正在尋找如何做到這一點的方法,特別是因爲我幾乎沒有WPF中的動畫經驗。想自己弄清楚細節,但努力開始。

第二個選項將在文本的任意一邊都有一個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 2012-03-26 11:02:45

+0

工具提示是我現在所擁有的,但是想試驗這個自動滾動的概念。 – Lyall 2012-03-26 11:06:52

+1

只是我的意見,但汽車滾動對我來說聽起來不太好。我不想讓我的顯示屏被簡單地移動鼠標。 – GazTheDestroyer 2012-03-26 11:09:09

回答

1

的重複鍵版本一個很好的解決辦法是隻在滾動的ScrollViewer遞增。

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的scrollviewer中,並帶有兩個repeatbuttons。

如果你想加快長你在舉行了它:

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; 
    } 

我還要權衡,並建議不使用ClickMode =「懸停」 ......用戶更習慣於點擊鈕釦。只是我的兩分錢。