我创建了一个嵌套的 WPF 数据网格。我看到您可以通过单击该行来展开它,但是当您执行相同操作时它不会折叠。
几个问题:
- 用户如何折叠网格?
- 有没有办法在父行上获取展开/折叠按钮?
- 每当您单击不同的父级展开时,它都会折叠您所在的前一个父级。有没有办法让网格保持你制作的方式。即如果我展开第 1 行然后转到第 3 行,第 1 行将停留在我展开的位置。
谢谢,格雷格
我创建了一个嵌套的 WPF 数据网格。我看到您可以通过单击该行来展开它,但是当您执行相同操作时它不会折叠。
几个问题:
谢谢,格雷格
使用 WPF 扩展器。这样您就可以扩展内部 DataGrid。
有几种方法可以达到这种行为。例如 Silverlight DataGrid 中的展开/折叠按钮。
如果您愿意,请xaml
使用:
<Style x:Key="ExpandableDataGridRowHeaderStyle"
TargetType="sdk:DataGridRowHeader">
<Setter Property="Background"
Value="#99E9EEF4" />
<Setter Property="IsTabStop"
Value="False" />
<Setter Property="SeparatorBrush"
Value="#FFFFFFFF" />
<Setter Property="SeparatorVisibility"
Value="Collapsed" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridRowHeader">
<Grid x:Name="Root">
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border BorderBrush="#FFFFFFFF"
BorderThickness="1,0,1,0"
Grid.ColumnSpan="2"
Grid.RowSpan="3">
<Grid>
<Rectangle x:Name="RowInvalidVisualElement"
Grid.ColumnSpan="2"
Fill="#FFF7D8DB"
Opacity="0"
Grid.RowSpan="3"
Stretch="Fill" />
<Rectangle x:Name="BackgroundRectangle"
Grid.ColumnSpan="2"
Fill="Transparent"
Grid.RowSpan="3"
Stretch="Fill" />
</Grid>
</Border>
<Button Background="{x:Null}"
BorderBrush="{x:Null}"
BorderThickness="0"
Padding="0"
Grid.RowSpan="1"
HorizontalAlignment="Stretch">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<AttachedBehaviors:ExpandButtonAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这AttachedBehavior
实际上会改变DetailsVisibility
:
public class ExpandButtonAction : TargetedTriggerAction<FrameworkElement>
{
#region Invoke
protected override void Invoke(object parameter)
{
RoutedEventArgs eventArgs = (RoutedEventArgs) parameter;
Button bsender = eventArgs.OriginalSource as Button;
var row = DataGridRow.GetRowContainingElement(eventArgs.OriginalSource as FrameworkElement);
if (row.DetailsVisibility == Visibility.Visible)
{
row.DetailsVisibility = Visibility.Collapsed;
}
else
{
row.DetailsVisibility = Visibility.Visible;
}
}
#endregion
}
并将其应用于您要展开/折叠RowHeaderStyle
的位置。DataGrid
DetailsTemplate