2013-08-28 109 views
0

如何滾動到FlowDocumentReader的頂部?FlowDocumentReader滾動到頂部

內容是通過結合

<FlowDocumentReader Grid.Row="4" Grid.Column="0" Name="FlowDocumentPageViewer1" HorizontalAlignment="Stretch"> 
    <FlowDocumentReader.Document> 
     <Binding ElementName="_this" Path="DocFlow" IsAsync="False" Mode="OneWay"/> 
    </FlowDocumentReader.Document>     
</FlowDocumentReader> 

如果我向下滾動,然後綁定新的內容不滾動到頂部設置。
隨着我想滾動到頂部的新內容。

基於從Clemnes評論這個滾動頂端

FlowDocumentPageViewer1.Document.BringIntoView(); 

現在我的問題是如何在呼叫自動化。
我不能把它放在get中,因爲不能在返回後放置該命令。
試過這兩個事件,但不與綁定更新

Loaded="FlowDocumentPageViewer1_loaded" 
SourceUpdated="FlowDocumentPageViewer1_loaded" 
+0

在代碼背後,你會在文檔上調用'BringIntoView()'。如果沒有簡單的方法,你可能不得不創建並綁定一個設置「Document」的附加屬性,並將它帶入視圖。 – Clemens

+0

@Clemens文檔上的BringIntoView()不會將滾動帶到頂部。我能夠調用Document.BringIntoView(),但它不做任何事情,因爲Document已經在視圖中。 – Paparazzi

+0

奇怪的是,當我在文檔之間切換時,它確實如此。我在一個文檔中向下滾動,然後將Document屬性設置爲其他文檔。如果沒有BringIntoView,新文檔也會滾動到與前一個文檔類似的位置。隨着BringIntoView它直接滾動到頂部。 – Clemens

回答

1

您可以創建一個附加屬性,設置原始Document財產解僱,還要求BringIntoView()

public class FlowDocumentReaderEx 
{ 
    public static readonly DependencyProperty DocumentProperty = 
     DependencyProperty.RegisterAttached(
      "Document", typeof(FlowDocument), typeof(FlowDocumentReaderEx), 
      new FrameworkPropertyMetadata(DocumentPropertyChanged)); 

    public static FlowDocument GetDocument(DependencyObject obj) 
    { 
     return (FlowDocument)obj.GetValue(DocumentProperty); 
    } 

    public static void SetDocument(DependencyObject obj, FlowDocument value) 
    { 
     obj.SetValue(DocumentProperty, value); 
    } 

    private static void DocumentPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
    { 
     var flowDocumentReader = obj as FlowDocumentReader; 

     if (flowDocumentReader != null) 
     { 
      flowDocumentReader.Document = e.NewValue as FlowDocument; 

      if (flowDocumentReader.Document != null) 
      { 
       flowDocumentReader.Document.BringIntoView(); 
      } 
     } 
    } 
} 

現在你可以綁定這個財產如:

<FlowDocumentReader ... 
    local:FlowDocumentReaderEx.Document="{Binding DocFlow, ElementName=_this}"/> 
+0

謝謝我今天可能會完成測試,因爲我對DependencyProperty並不熟悉,在將它用於生產應用程序之前,我需要先學習它。 – Paparazzi