extended wpf datagrid wpftoolkit

wpf - extended - Necesito Expand/Collapse para RowDetailsTemplate



extended wpf toolkit github (4)

Al seleccionar una fila en la cuadrícula, se debe expandir la fila usando RowDetailsTemplate para mostrar el contenido. Esto hace que Fila sea la Fila Seleccionada y establece el valor de la propiedad SelectedIndex de DataGrid.

Para contraer la Fila, establezca la propiedad SelectedIndex de DataGrid en -1.

Tengo wpfTolkit datagrid. Él tiene DataGrid.RowDetailsTemplate Necesito hacer el botón cuando haga clic en Expandir / Contraer.

Cómo hacer esto No pude encontrar el evento que desea

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


He mejorado la respuesta anterior:

En lugar de utilizar DataGrid.RowHeaderTemplate, utilice DataGridTemplateColumn de la siguiente manera:

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

Benifit es que no necesita volver a posicionar el mouse después de hacer clic en el botón de expansión.


Incluir eventos colapsados ​​y expandidos como se muestra a continuación

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

En el código detrás

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


Mira esto ...

Agregar un botón a un WGD DataGrid

O

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

Salida