2013-05-31 88 views
0

我有這個DataGridCanvasWPF畫布相對位置

<DataGrid Canvas.ZIndex="1" x:Name="dgTimeline"/> 

<Canvas Height="30" Width="999" Canvas.ZIndex="2" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="71,387,0,0"> 
    <Line Name="time" X1="0" Y1="0" X2="0" Y2="24" Stroke="Black" StrokeThickness="2"/> 
</Canvas> 

導致: enter image description here

然而,當我移動DataGrid的水平滾動條Canvas明顯巋然不動其位置,因爲其父母是Window而不是DataGridenter image description here

是否可以保留Canvas相對於DataGrid而不是其父母的位置,以便在滾動DataGrid時,Canvas會保持不動,因爲它是DataGrid的元素?我試圖將Canvas放在DataGrid的內部,但那不起作用。

回答

1

您可以將水平滾動條添加到畫布,然後嘗試同步畫布和數據網格的水平滾動條。像...

private void dataGrid_ScrollChanged(object sender, ScrollChangedEventArgs e) 
{ 
    canvasScrollViewer.ScrollToHorizontalOffset(e.HorizontalOffset); 
} 

private void canvasScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) 
{ 
    ScrollViewer dgScrollViewer = GetScrollViewerInstance(); 
    dgScrollViewer.ScrollToHorizontalOffset(e.HorizontalOffset); 
} 

private ScrollViewer GetScrollViewerInstance() 
{ 
    var ctrl = VisualTreeHelper.GetChild(dataGrid, 0); 
    if (ctrl is Border) 
    { 
     var ctrl1 = VisualTreeHelper.GetChild(ctrl, 0); 
     if (ctrl1 is ScrollViewer) 
     { 
      dgScrollViewer = ctrl1 as ScrollViewer; 
     } 
    } 
} 

此代碼只是讓你知道如何做到這一點,而不是實際的工作代碼。如果您不想顯示,請將「畫布的Horizo​​ntalScrollBarVisibility」設置爲「隱藏」。在這種情況下,你不需要第二個事件處理程序。

+0

其實你的代碼就像一個魅力! –