2010-09-30 2 views
9

У меня есть wpfTolkit datagrid. У него есть DataGrid.RowDetailsTemplate. Мне нужно сделать кнопку при нажатии, чтобы она разворачивалась/сворачивалась.Мне нужно развернуть/свернуть для RowDetailsTemplate

Как это сделать я не мог найти событие, которое вы хотите

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

ответ

0

Выбор строки на сетке должны расширить строки с использованием RowDetailsTemplate для отображения содержимого. Это делает Row the Selected Row и устанавливает значение свойства SelectedIndex DataGrid.

Чтобы свернуть строку, установите свойство SelectedIndex DataGrid равным -1.

2

Include свернутом и развернутом события, как показано ниже

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

В коде позади

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

Проверить эту ...

Adding a Button to a WPF DataGrid

ИЛИ

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; 
     } 
} 

Выходные

enter image description here

+2

btw, 'Expander_Expanded' и' Expander_Collapsed' идентичны. если он предназначен, может быть один метод обработки событий «Expanded» и «Collapsed» – ASh

0

я улучшил предыдущий ответ:

Вместо использования DataGrid.RowHeaderTemplate использовать DataGridTemplateColumn, как показано ниже:

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

Benifit это вам не нужно повторно позицию мыши после нажатия кнопки расширителя.

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