2012-03-15 101 views
0
<ScrollViewer VerticalScrollBarVisibility="Auto" > 
<TextBlock Text="{Binding Status}" 
      HorizontalAlignment="Center" /> 
</ScrollViewer> 

的狀態總是我加入到它,也就是說,在後面的代碼總是我做這件事情:ScrollViewer控件在WPF

Status+= Environment.NewLine + "Hi"; 

而ScrollViewer中增加,但狀態我看到的是第一個,當我想看到最後一個我需要滾動下面看到它時,我的問題是:我如何使Scrollviewer在automaticaly下滾動?這意味着我總是看到最後一個狀態不是首先。

對不起英文不好。

回答

1

名稱您的ScrollViewer這樣你就可以在代碼中訪問它的背後,是這樣的:

<ScrollViewer x:Name="MyScrollViewer" VerticalScrollBarVisibility="Auto" > 
<TextBlock Text="{Binding Status}" 
     HorizontalAlignment="Center" /> 
</ScrollViewer> 

然後,你可以這樣做:

Status+= Environment.NewLine + "Hi"; 
MyScrollViewer.ScrollToEnd(); 

隨着我做MVVM的方式,我有機會從我的視圖ViewModel,所以當視圖第一次加載時,我會訂閱ViewModel上的PropertyChanged事件,如下所示:

MyViewModel.PropertyChanged += ViewModelChanged; 

然後在ViewModelChanged回調我有這樣的:

private void ViewModelChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "Status") 
     MyScrollViewer.ScrollToEnd(); 
} 

每次視圖模型的狀態屬性改變,現在的ScrollViewer將滾動結束。當您離開該屏幕時,請記住取消訂閱MyViewModel.PropertyChanged以避免內存泄漏。

+0

謝謝,但我怎麼可以在MVVM模式下做到這一點? – 2012-03-15 13:34:50

+0

在MVVM中,ViewModel不應該知道有關視圖的詳細信息,例如ScrollViewer的存在。在這種情況下,在視圖代碼隱藏中編寫代碼來完成此任務被廣泛認爲是可以接受的。我將調整我的答案,向您展示如何使用MVVM進行操作。 – 2012-03-15 13:37:39

+0

這是另一種在xaml中做的方法嗎? – 2012-03-15 13:52:00