Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 展开/折叠嵌套WPF网格_C#_Wpf_Wpfdatagrid - Fatal编程技术网

C# 展开/折叠嵌套WPF网格

C# 展开/折叠嵌套WPF网格,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我已经创建了一个嵌套的WPF数据网格。我看到你可以通过点击行来展开它,但是当你做同样的事情时它不会崩溃 几个问题: 用户如何折叠网格 有没有办法在父行上获取展开/折叠按钮 每当您单击另一个父级进行展开时,它都会折叠上一个父级。有没有办法让网格保持你的状态。i、 e.如果我展开第1行,然后转到第3行,第1行将停留在我展开的位置 谢谢, Greg使用WPF扩展器。因此,您可以扩展内部数据网格。有几种方法可以实现这种行为。 例如 . 如果您更喜欢xaml,请使用: <Style x:Key="E

我已经创建了一个嵌套的WPF数据网格。我看到你可以通过点击行来展开它,但是当你做同样的事情时它不会崩溃

几个问题:

  • 用户如何折叠网格
  • 有没有办法在父行上获取展开/折叠按钮
  • 每当您单击另一个父级进行展开时,它都会折叠上一个父级。有没有办法让网格保持你的状态。i、 e.如果我展开第1行,然后转到第3行,第1行将停留在我展开的位置
  • 谢谢,
    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
    }