2011-06-14 46 views
0

所以我建立一個很好的嵌套數據網格,看起來是這樣的:當它被設置爲VisibleWhenSelected,節點DataGridDetailsPresenter爲WPF 3.5嵌套的DataGrid行的細節在Visual樹沒有顯示

<dg:DataGrid x:Name="mainGrid" 
       AutoGenerateColumns="False" 
       CanUserAddRows="False" 
       AreRowDetailsFrozen="True" 
       CanUserReorderColumns="False" 
       CanUserResizeColumns="True" 
       CanUserResizeRows="False" 
       SelectionUnit="FullRow" 
       RowDetailsVisibilityMode="VisibleWhenSelected"> 
       <dg:DataGrid.Columns> 
        <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="36" IsReadOnly="False"> 
         <dg:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="+" Width="28" Height="28" /> 
          </DataTemplate> 
         </dg:DataGridTemplateColumn.CellTemplate> 
        </dg:DataGridTemplateColumn> 
        <dg:DataGridTemplateColumn> 
         <dg:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <Grid> 
            <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"/> 
           </Grid> 
          </DataTemplate> 
         </dg:DataGridTemplateColumn.CellTemplate> 
        </dg:DataGridTemplateColumn> 
        <dg:DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="582"> 
         <dg:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Margin="5" VerticalAlignment="Center" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=Default}" /> 
          </DataTemplate> 
         </dg:DataGridTemplateColumn.CellTemplate> 
        </dg:DataGridTemplateColumn> 
        <dg:DataGridTemplateColumn Header="Status" IsReadOnly="True" Width="150"> 
         <dg:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Margin="5" VerticalAlignment="Center" Text="{Binding Status, Mode=TwoWay, UpdateSourceTrigger=Default}" /> 
          </DataTemplate> 
         </dg:DataGridTemplateColumn.CellTemplate> 
        </dg:DataGridTemplateColumn> 
        <dg:DataGridCheckBoxColumn Binding="{Binding IsSelected}"/> 
       </dg:DataGrid.Columns> 
       <dg:DataGrid.RowDetailsTemplate> 
        <DataTemplate> 
         <dg:DataGrid x:Name="scondaryDatagrid" Margin="29,0,0,0" 
          AutoGenerateColumns="False" 
          CanUserAddRows="False" 
          AreRowDetailsFrozen="True" 
          CanUserReorderColumns="False" 
          CanUserResizeColumns="True" 
          CanUserResizeRows="False" 
          SelectionUnit="Cell" 
          RowDetailsVisibilityMode="VisibleWhenSelected" 
          ItemsSource="{Binding Grades, Mode=TwoWay}"> 
          <dg:DataGrid.Columns> 
           <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True"> 
            <dg:DataGridTemplateColumn.CellTemplate> 
             <DataTemplate> 
              <Button Content="+" Width="28" Height="28" /> 
             </DataTemplate> 
            </dg:DataGridTemplateColumn.CellTemplate> 
           </dg:DataGridTemplateColumn> 
           <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True"> 
            <dg:DataGridTemplateColumn.CellTemplate> 
             <DataTemplate> 
              <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
             </DataTemplate> 
            </dg:DataGridTemplateColumn.CellTemplate> 
           </dg:DataGridTemplateColumn> 
           <dg:DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="550"> 
            <dg:DataGridTemplateColumn.CellTemplate> 
             <DataTemplate> 
              <TextBlock Margin="5" Text="{Binding Name, Mode=TwoWay}" VerticalAlignment="Center" /> 
             </DataTemplate> 
            </dg:DataGridTemplateColumn.CellTemplate> 
           </dg:DataGridTemplateColumn> 
          </dg:DataGrid.Columns> 
          <dg:DataGrid.RowDetailsTemplate> 
           <DataTemplate> 
            <dg:DataGrid Margin="25,0,0,0" 
             AutoGenerateColumns="False" 
             CanUserAddRows="False" 
             AreRowDetailsFrozen="True" 
             CanUserReorderColumns="False" 
             CanUserResizeColumns="True" 
             CanUserResizeRows="False" 
             SelectionUnit="Cell" 
             ItemsSource="{Binding Notes, Mode=TwoWay}"> 
             <dg:DataGrid.Columns> 
              <dg:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="32" IsReadOnly="True"> 
               <dg:DataGridTemplateColumn.CellTemplate> 
                <DataTemplate> 
                 <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
                </DataTemplate> 
               </dg:DataGridTemplateColumn.CellTemplate> 
              </dg:DataGridTemplateColumn> 
              <dg:DataGridTemplateColumn Header="Note" IsReadOnly="True" Width="550"> 
               <dg:DataGridTemplateColumn.CellTemplate> 
                <DataTemplate> 
                 <TextBlock Margin="5" Text="{Binding Note, Mode=TwoWay}" VerticalAlignment="Center" /> 
                </DataTemplate> 
               </dg:DataGridTemplateColumn.CellTemplate> 
              </dg:DataGridTemplateColumn> 
             </dg:DataGrid.Columns> 
            </dg:DataGrid> 
           </DataTemplate> 
          </dg:DataGrid.RowDetailsTemplate> 
         </dg:DataGrid> 
        </DataTemplate> 
       </dg:DataGrid.RowDetailsTemplate> 


      </dg:DataGrid> 

由於RowDetailsVisibilityMode財產行有0個孩子。當該屬性設置爲可見時,我可以看到DataGridDetailsPresenter子項。

當RowDetailsVisibilityMode屬性爲VisibleWhenSelected時,如何強制包含Visual樹中的所有節點?

任何輸入,非常感謝。

回答

1

你想完成什麼?

除非RowDetails可見,否則它們不在Visual Tree中,除非可以通過將RowDetailsVisibilityMode設置爲Visible但將RowDetails DataGrid可見性設置爲Collapsed來強制創建它們。這可能行不通。我不知道DataGrid是否在Visual Tree中,如果設置爲3.5中的Collapsed。

+0

我能夠通過解析樹和基於用戶的操作打開元素來解決潛在的問題。感謝這個想法。 – asuciu 2012-04-12 17:32:10