2016-11-30 4 views
2

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

enter image description here

В то время как первый столбец выделяет строку, второй столбец подчеркивает «внутренний строка ", и для каждой внешней строки должно быть поле текстового поля, в которое пользователь может вводить данные.

То, с чем я борюсь, заключается в том, чтобы понять, возможно ли это. Все решения, которые я придумываю, помещают другую метку во вторую внешнюю строку (где TextField 2.1.1).

Ближайший я мог бы прийти плохой макет, который в основном сводится к ItemsControl связывания с DataTemplate определен как:

<ItemsControl Name="SelectedSampleData" Grid.Row="1" ItemsSource="{Binding SelectedSampleData}" ItemTemplate="{StaticResource DefaultTemplate}" /> 

<DataTemplate x:Key="DefaultTemplate"> 
    <Grid x:Name="GridItem" MaxWidth="{Binding ElementName=Container,Path=ActualWidth}" > 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Viewbox Height="20" HorizontalAlignment="Left"> 
      <TextBlock Grid.Row="0" Text="{Binding Path=field1}" Margin="5,1,0,0" Background="LightBlue" /> 
     </Viewbox> 
     <igDP:XamDataGrid Name="GridConsuntivi" Grid.Row="1" DataSource="{Binding Path=field2List}" Margin="25,0,0,0"> 
      <igDP:XamDataGrid.FieldLayouts> 
       <igDP:FieldLayout Key="DefaultLayout"> 

        <igDP:FieldLayout.Fields > 

         <igDP:Field Name="label1" IsReadOnly="True"> 
          <igDP:Field.Settings> 
           <igDP:FieldSettings LabelTextWrapping="Wrap" LabelMaxWidth="100" AllowEdit="False" /> 
          </igDP:Field.Settings> 
         </igDP:Field> 

         <igDP:Field Name="label2" IsReadOnly="True"> 
          <igDP:Field.Settings> 
           <igDP:FieldSettings LabelTextWrapping="Wrap" LabelMaxWidth="70" AllowEdit="False" /> 
          </igDP:Field.Settings> 
         </igDP:Field> 

         <igDP:Field Name="label3" IsReadOnly="True"> 
          <igDP:Field.Settings> 
           <igDP:FieldSettings LabelTextWrapping="Wrap" LabelMaxWidth="70" AllowEdit="False" /> 
          </igDP:Field.Settings> 
         </igDP:Field> 

         <igDP:Field Name="label3" IsReadOnly="True"> 
          <igDP:Field.Settings> 
           <igDP:FieldSettings LabelTextWrapping="Wrap" LabelMaxWidth="95" AllowEdit="False" /> 
          </igDP:Field.Settings> 
         </igDP:Field> 

         <igDP:Field Name="label4" IsReadOnly="True"> 
          <igDP:Field.Settings> 
           <igDP:FieldSettings LabelTextWrapping="Wrap" LabelMaxWidth="180" AllowEdit="False" /> 
          </igDP:Field.Settings> 
         </igDP:Field> 

        </igDP:FieldLayout.Fields> 
       </igDP:FieldLayout> 
      </igDP:XamDataGrid.FieldLayouts> 

     </igDP:XamDataGrid> 
     <TextBox Margin="25,10,0,0" AcceptsReturn="True" MaxWidth="{Binding ElementName=parent,Path=ActualWidth}" TextWrapping="Wrap" IsEnabled="True" Grid.Row="2" Text="{Binding Path=note}" /> 
     <Separator Grid.Row="3"/> 
    </Grid> 
</DataTemplate> 

, который играет так:

enter image description here

Кроме визуальная уродство, которое, как я думаю, может быть исправлено с некоторым художественным прикосновением (чего у меня нет), я ненавижу тот факт, что есть две заголовки с одинаковой информацией. Мне хотелось бы, чтобы он чувствовал, что это единый единый компонент.

У вас есть мысли?

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

Я использую Infragistics, если это помогает.

Заранее спасибо

ответ

2

Внутренние строки, компонент не выровнены в стандартной колонке (для текстовых полей), и несколько заголовков строк заставят вас «угон» базисные понятия DataGrid. Я рекомендую вам разработать собственный пользовательский контроль без DG.

В противном случае вам придется переопределить весь шаблон DataGrid, и вам обязательно понадобятся некоторые пользовательские поведения/логики, поэтому вам также необходимо расширить сам элемент управления DataGrid.

Следующая статья может дает хорошую точку входа https://www.codeproject.com/articles/586132/wpf-datagrid-custommization-using-style-and-templa

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