2015-04-01 25 views
0

我有一個WPF DataGrid,允許根據需要垂直擴展,因此不需要滾動或平移DataGrid內部的內容。但是,它位於具有ScrollViewer的窗口中。啓用WPF DataGrid平移?

當我運行它時,DataGrid垂直增長以允許所有行按預期方式運行,並且沿窗口邊緣的ScrollBar按預期顯示。但是,如果我在DataGrid本身之外的窗口區域執行操作,則只能觸摸/平移。 DataGrid接受並有效地阻止輸入(這並非意外)

那麼我怎樣才能讓DataGrid將這個觸摸/平移輸入向上傳遞給它的容器,即窗口,以便窗口能夠知道它需要滾動?

回答

0

我可能在這裏錯了,但我認爲WPF中的視覺樹向上冒泡。這意味着您的DataGrid,正如我現在正在解釋的那樣,會捕獲該事件並按照您提到的正確處理它。

但是,一旦完成,它會冒泡到它的父窗口,從而不會將事件傳遞給您的滾動查看器。它這樣做是因爲scrollviewer中的datagrid可能是兄弟,而不是父/子關係。

一個選項是設置一個命令來處理這種行爲。 或者您可以使用調度:

this.Dispatcher.Invoke(() => 
      control.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset + 50); 
+0

的ScrollViewer中是窗口的子窗口。 我知道事件氣泡向上。但我相信處理這種類型的事件的控件的默認行爲是讓他們消費它,而不是轉發給他們的父母。 其他控件也是如此。通常這不是一個概率,但DataGrid非常大,當我觸摸並拖動它時,需要滾動窗口。 我想我需要掛鉤到在DataGrid上平移時被觸發的正確的Preview___事件(這將從頂部下來),但我甚至不知道平移使用了什麼事件,我找不到任何文檔 – Joey 2015-04-02 02:51:47