2016-11-30 45 views
2

我試圖找出一種方法來定義自定義用戶控件,如下圖: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