C# 展开/折叠嵌套WPF网格
我已经创建了一个嵌套的WPF数据网格。我看到你可以通过点击行来展开它,但是当你做同样的事情时它不会崩溃 几个问题:C# 展开/折叠嵌套WPF网格,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我已经创建了一个嵌套的WPF数据网格。我看到你可以通过点击行来展开它,但是当你做同样的事情时它不会崩溃 几个问题: 用户如何折叠网格 有没有办法在父行上获取展开/折叠按钮 每当您单击另一个父级进行展开时,它都会折叠上一个父级。有没有办法让网格保持你的状态。i、 e.如果我展开第1行,然后转到第3行,第1行将停留在我展开的位置 谢谢, Greg使用WPF扩展器。因此,您可以扩展内部数据网格。有几种方法可以实现这种行为。 例如 . 如果您更喜欢xaml,请使用: <Style x:Key="E
Greg使用WPF扩展器。因此,您可以扩展内部数据网格。有几种方法可以实现这种行为。 例如 . 如果您更喜欢
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>
并将此应用于
DataGrid
的RowHeaderStyle
,您要在其中展开/折叠DetailsTemplate
我尝试了扩展器,但它看起来像垃圾。你把它放在哪里?你必须为wpf创建一个xaml样式,并在其中放置你的扩展器。本例中的sdk名称空间是什么?@gregorydd它是xmlns:sdk=”“我必须为此安装一些东西吗?找不到DataGridFrozenGrid是的我找到了。但是我的xaml说它找不到您上面提供的名称空间的DataGridFrozenGrid。我想知道这是否是因为我在做WPF,而不是Silverlight。
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
}