2010-09-30 11 views
9

Mam wpfTolkit datagrid. Ma DataGrid.RowDetailsTemplate Potrzebuję przycisku, po kliknięciu rozwinie/zwinie.Potrzebuję Expand/Collapse dla RowDetailsTemplate

Jak to zrobić nie mogłem znaleźć zdarzenie chcesz

<Custom:DataGrid RowDetailsVisibilityMode="VisibleWhenSelected" SelectionMode="Extended" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False"> 
    <Custom:DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <Custom:DataGrid> 
       <Custom:DataGrid.Columns> 
        <Custom:DataGridTextColumn Binding="{Binding idClient, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
        <Custom:DataGridTextColumn Binding="{Binding name_client, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
       </Custom:DataGrid.Columns> 
      </Custom:DataGrid> 
     </DataTemplate> 
    </Custom:DataGrid.RowDetailsTemplate> 
    <Custom:DataGrid.Columns> 
     <Custom:DataGridTemplateColumn> 
      <Custom:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Expander IsExpanded="True"/> 
       </DataTemplate> 
      </Custom:DataGridTemplateColumn.CellTemplate> 
     </Custom:DataGridTemplateColumn> 
     <Custom:DataGridTextColumn Binding="{Binding idPartner, Mode=Default}" Header="Ид" IsReadOnly="True"/> 
     <Custom:DataGridTextColumn Binding="{Binding name_partner, Mode=Default}" Header="Имя" IsReadOnly="True"/> 
    </Custom:DataGrid.Columns> 
</Custom:DataGrid> 

Odpowiedz

0

Wybór rzędzie na starcie powinno rozszerzyć Row używając RowDetailsTemplate do wyświetlania zawartości. Spowoduje to, że wiersz Wybrany wiersz i ustawia wartość właściwości SelectedIndex DataGrid.

Aby zwinąć wiersz, należy ustawić właściwość SelectedIndex obiektu DataGrid na -1.

2

Dołącz Zwinięty i rozszerzony zdarzeń jak poniżej

<Custom:DataGridTemplateColumn> 
    <Custom:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Collapsed="exp_Collapsed" Expanded="exp_Expanded"/> 
      </DataTemplate> 
     </Custom:DataGridTemplateColumn.CellTemplate> 
    </Custom:DataGridTemplateColumn> 

W kodzie za

private void exp_Collapsed(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed; 
     } 

     private void exp_Expanded(object sender, RoutedEventArgs e) 
     { 
      this.dataGrid1.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected; 
     } 
13

sprawdzić ten ...

Adding a Button to a WPF DataGrid

LUB

XAML:

<DataGrid Name="dg1" AutoGenerateColumns="False" SelectionMode="Single" CanUserAddRows="false" CanUserDeleteRows="False" SelectionUnit="FullRow" > 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0"/> 
     </Style> 
    </DataGrid.CellStyle> 

    <DataGrid.RowHeaderTemplate> 
     <DataTemplate> 
      <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"> 

      </Expander> 
     </DataTemplate> 
    </DataGrid.RowHeaderTemplate> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" IsReadOnly="True" Width="100" Binding="{Binding Name}" /> 
     <DataGridTextColumn Header="Title" IsReadOnly="True" Width="100" Binding="{Binding Title}" /> 
     <DataGridTextColumn Header="Job" IsReadOnly="True" Width="100" Binding="{Binding Job}" /> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Isi, Converter={StaticResource ResourceKey=isiTextConverter}}" Margin="10,5,0,0" /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 

MainWindow.xaml.cs

private void Expander_Expanded(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
    if (vis is DataGridRow) 
    { 
     var row = (DataGridRow)vis; 
     row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
     break; 
    } 
} 

private void Expander_Collapsed(object sender, RoutedEventArgs e) 
{ 
    for (var vis = sender as Visual; vis != null; vis = VisualTreeHelper.GetParent(vis) as Visual) 
     if (vis is DataGridRow) 
     { 
      var row = (DataGridRow)vis; 
      row.DetailsVisibility = row.DetailsVisibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
      break; 
     } 
} 

wyjścia

enter image description here

+2

btw, 'Expander_Expanded' i' Expander_Collapsed' są identyczne. jeśli jest przeznaczona, może istnieć jedna metoda obsługi zdarzeń 'Expanded' i' Collapsed' – ASh

0

I poprawiły poprzednią odpowiedź:

Zamiast DataGrid.RowHeaderTemplate używać DataGridTemplateColumn jak poniżej:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Expander Expanded="Expander_OnExpanded"  Collapsed="Expander_OnCollapsed"> 
       </Expander> 
      </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Benifit jest nie musisz ponownie pozycję myszy po kliknięciu przycisku ekspandera.

Powiązane problemy