2014-01-20 140 views
0

我是WPF的新手,我试图为正在开发的应用创建仪表板界面。我的问题如下:水平滚动问题

我有一个datagrid将包含我的数据。这个数据网格在网格中,因为我需要特殊部分的超级链接。我在数据表中插入了一个测试行,它显示正常,但网格中的datagrid元素似乎有自己的滚动条。超级标题行和数据网格行都从窗口延伸出来,但只有datagrid行会滚动。当datagrid行滚动时,2个可见的超级标头保持在同一个位置。以下是我的xaml代码来生成接口。我曾尝试在scrollviewer中包装网格,并将超级标题的行的水平滚动条设置为可见,但目前为止没有任何工作。如果我至少可以让超级标题滚动,至少我可以尝试创建一个事件处理程序,以在移动数据网格滚动条时移动超级标题。对不起,如果这看起来有点乱码,但我还没喝过咖啡,而且我还有偏头痛,这是程序员要体验的最好的事情之一。 在此先感谢

<Canvas HorizontalAlignment="Center" Height="508" VerticalAlignment="Top" Width="1366" Margin="-4,4,2,-7"> 

    <Grid Canvas.Top="2"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="2*"/> 
      <RowDefinition Height="2*"/> 
     </Grid.RowDefinitions> 
     <Grid Grid.Row="0" ScrollViewer.CanContentScroll="True"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="{Binding ElementName=grid, Path=RowHeaderWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=TypeCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=NCRCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=StatusCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PStkCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=DfStkCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=QtyCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=DfCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=DfDateCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=b1, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CCodeCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=ByCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=InvAssignCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=InvCommentsCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=b2, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CStepNoCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CActionCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CAssignCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CReqCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=CComplCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=MCostCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=LabourCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=b3, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PStepCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PActionCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PAssignedCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PReqCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PCompCol, Path=ActualWidth}" /> 
       <ColumnDefinition Width="{Binding ElementName=PDateCol, Path=ActualWidth}" /> 
      </Grid.ColumnDefinitions> 

       <TextBlock Text="INVESTIGATION" Height="20" Grid.Column="10" Grid.ColumnSpan="5" Grid.Row="0"/> 
       <TextBlock Text="CORRECTIVE ACTION" Height="20" Grid.Column="15" Grid.ColumnSpan="8" Grid.Row="0" /> 
       <TextBlock Text="PREVENTATIVE ACTION" Height="20" Grid.Column="23" Grid.ColumnSpan="6" Grid.Row="0"/> 
     </Grid> 
     <DataGrid x:Name="grid" Grid.Row="1" Grid.Column="0" CanUserAddRows="False" HorizontalAlignment="Center" VerticalAlignment="Top" Width="1524" Canvas.Top="44" HeadersVisibility="Column" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" Canvas.Left="-180" CellEditEnding="grid_CurrentCellChanged" Margin="0,0,881,0"> 
      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="TypeCol" Binding="{Binding Type}" Header="Type" Width="50" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="NCRCol" Binding="{Binding NCR}" Header="NCR" Width="100" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="StatusCol" Binding="{Binding Status}" Header="Status" Width="50"/> 
       <DataGridTextColumn x:Name="PStkCol" Binding="{Binding PStkCode}" Header="Parent Stock Code" Width="120 " IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="DfStkCol" Binding="{Binding DfStkCode}" Header="Defective Stock Code" Width="125" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="QtyCol" Binding="{Binding Qty}" Header="Quantity" Width="120" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="DfCol" Binding="{Binding Defect}" Header="Defect" Width="100" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="DfDateCol" Binding="{Binding Defect Date}" Header="Defect Date" Width="100" IsReadOnly="True"/> 
       <DataGridTemplateColumn x:Name="b1" Width="20" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="CCodeCol" Header ="Cause Code" Width ="80" /> 
       <DataGridTextColumn x:Name="ByCol" Header ="By" Width ="80"/> 
       <DataGridTextColumn x:Name="InvAssignCol" Header ="Assigned To" Width ="100" /> 
       <DataGridTextColumn x:Name="InvCommentsCol" Header ="Comments" Width ="100" /> 
       <DataGridTemplateColumn x:Name="b2" Width="20" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="CStepNoCol" Header ="Step No" Width ="60" /> 
       <DataGridTextColumn x:Name="CActionCol" Header ="Action" Width ="100" /> 
       <DataGridTextColumn x:Name="CAssignCol" Header ="Assigned To" Width ="100"/> 
       <DataGridTextColumn x:Name="CReqCol" Header ="Reqd By" Width ="100" /> 
       <DataGridTextColumn x:Name="CComplCol" Header ="Completed By" Width ="100"/> 
       <DataGridTextColumn x:Name="MCostCol" Header="Material Cost($)" Width="100"/> 
       <DataGridTextColumn x:Name="LabourCol" Header="Labour (Hrs)" Width="100"/> 
       <DataGridTemplateColumn x:Name="b3" Width="20" IsReadOnly="True"/> 
       <DataGridTextColumn x:Name="PStepCol" Header="Step No" Width="60"/> 
       <DataGridTextColumn x:Name="PActionCol" Header="Action" Width="100"/> 
       <DataGridTextColumn x:Name="PAssignedCol" Header="Assigned To" Width="100"/> 
       <DataGridTextColumn x:Name="PReqCol" Header="Reqd By" Width="100"/> 
       <DataGridTextColumn x:Name="PCompCol" Header="Completed By" Width="100"/> 
       <DataGridTextColumn x:Name="PDateCol" Header="Completed Date" Width="100"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Canvas> 
+0

我按照你说的,目前发生的事情,但你可以指定你怎么会喜欢这个改变?你想要一切使用滚动条?你不想使用滚动条? – MoonBoots89

+0

对不起,基本上我想要的是一个单一的滚动条来控制具有数据的数据网格行和包含超级标题的行,在这个阶段有一个数据网格行的滚动条。我可以得到滚动条的标题出现,但它不起作用 –

回答

0

而不是试图在Grid有没有关系,与之相匹配的列和ScrollBar S中DataGrid的,只要定义DataGrid头但是你想。您可以使用的DataGrid.DataGridTemplateColumn ......也许这样的事情HeaderTemplate属性:

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.HeaderTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition /> 
          <RowDefinition /> 
         </Grid.RowDefinitions> 
         <TextBlock Text="Top Header" /> 
         <TextBlock Grid.Row="1" Text="Bottom Header" /> 
        </Grid>   
       </DataTemplate> 
      </DataGridTemplateColumn.HeaderTemplate> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

这是有道理的,我会玩弄它,看看我怎么走,谢谢 –

+0

我可以运行这个,有什么好是做标题跨越多列,但这可能只是我nitpicky –