[英]WPF DataGrid inside a ScrollViewer
我有一個StackPanel
,帶有一個 header 控件和一個Scrollviewer
內的DataGrid
; 像這樣:
<ScrollViewer>
<StackPanel Orientation="Vertical">
<Canvas x:Name="header"
Height="300" />
<DataGrid x:Name="dataGrid">
</DataGrid>
</StackPanel>
</ScrollViewer>
scoll 行為應滿足以下要求:
DataGrid
應滾動外部ScrollViewer
header 控件(由Canvas
表示)由ScollViewer
滾動。
DataGrid
底部的水平滾動條應隨時保留在屏幕上。
水平滾動條不應滾動 header 控件,只能滾動DataGrid
。
我嘗試了DataGrid.ScrollViewer
的各種設置,但都沒有達到預期的效果,將StackPanel
更改為WrapPanel
甚至Grid
也沒有任何幫助。
這可能嗎? 感謝您提供任何幫助和閱讀資源。
我也一直在努力解決您的第一個問題 - 讓內部 ScrollViewer(或本例中的 DataGrid)滾動外部 ScrollViewer。 但我認為我有一個非常優雅的解決方案。 您必須將事件處理程序添加到 DataGrid 的 PreviewMouseWheel 事件(以及 ScrollViewer 的名稱):
<ScrollViewer x:Name="scroll_viewer">
<StackPanel Orientation="Vertical">
<Canvas x:Name="header"
Height="300" />
<DataGrid x:Name="dataGrid" PreviewMouseWheel="mousewheel">
</DataGrid>
</StackPanel>
</ScrollViewer>
然后是事件處理方法:
private void mousewheel(object sender, MouseWheelEventArgs e)
{
//what we're doing here, is that we're invoking the "MouseWheel" event of the parent ScrollViewer.
//first, we make the object with the event arguments (using the values from the current event)
var args = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
//then we need to set the event that we're invoking.
//the ScrollViewer control internally does the scrolling on MouseWheelEvent, so that's what we're going to use:
args.RoutedEvent = ScrollViewer.MouseWheelEvent;
//and finally, we raise the event on the parent ScrollViewer.
scroll_viewer.RaiseEvent(args);
}
希望這可以幫助!
這是一個非常復雜的問題,它可能需要一個人周才能完成:但這是一個解決一半問題的開始:
<ScrollViewer x:Name="scroll">
<DataGrid x:Name="dataGrid">
<DataGrid.Template>
<ControlTemplate>
<StackPanel Orientation="Vertical">
<Canvas x:Name="header" Height="300" />
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</DataGrid.Template>
</DataGrid>
</ScrollViewer>
如果您將 canvas 放在數據網格的模板中,它會將其視為數據網格的一部分,因此 canvas 和數據網格將作為一個滾動。
顯然,datagrid 模板將是空白的,不顯示任何標題。 因此,您需要從頭開始重寫它。 為此,您可以使用默認源代碼。
要查找模板,只需在給定鏈接中搜索<ControlTemplate TargetType="{x:Type DataGrid}">
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.