2014-01-20 3 views
0

Я новичок в WPF, и я пытаюсь создать интерфейс панели инструментов для приложения, которое я разрабатываю. Моя проблема заключается в следующем:Проблема с горизонтальной прокруткой

У меня есть datagrid, который будет содержать мои данные. Этот datagrid находится внутри сетки, потому что мне нужны суперзаголовки над определенными разделами. Я вставил тестовую строку в таблицу данных, и она отображается нормально, но элемент datagrid внутри сетки, похоже, имеет свою собственную полосу прокрутки. И верхняя строка заголовка, и строка datagrid простираются от окна, но только свитки строк данных. 2 видимых супер заголовка остаются в одном и том же месте, в то время как свиток строк данных. Ниже приведен код моего xaml для создания интерфейса. Я попробовал обернуть сетку в scrollviewer, а также установить горизонтальную полосу прокрутки строки с супер заголовками на видимые, но до сих пор ничего не работало. Если я могу заставить супер заголовки прокручивать, по крайней мере, я могу попытаться сделать обработчик событий, чтобы переместить супер заголовки, когда перемещается панель прокрутки datagrid. Извините, если это кажется искаженным, но у меня еще нет кофе, у меня также есть мигрень, 2 из лучших вещей для программиста. Заранее спасибо

<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

извините, в основном, что я хочу, это одна полоса прокрутки для управления как строкой datagrid с данными, так и строкой, содержащей супер заголовки, на этом этапе есть строка прокрутки для строки сетки данных. Я могу получить полосу прокрутки для заголовков, но она не работает –

ответ

0

Вместо того, чтобы соответствовать столбцы и ScrollBar сек на DataGrid в Grid, что не имеет к нему никакого отношения, просто определить заголовок DataGrid однако вы хотите. Вы можете использовать HeaderTemplate свойство DataGrid.DataGridTemplateColumn ... может быть что-то вроде этого:

<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 –

Смежные вопросы