1

我得到以下信息DataGrid

<DataGrid ItemsSource="{Binding MyList}" AutoGenerateColumns="False" SelectionUnit="FullRow">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header" Binding="{Binding MainText}"/>
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate DataType="{x:Type local:MyViewModel}">
            <TextBlock Text="{Binding DetailText}"/>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

AssumongMyListMyViewModel对象的集合:

public class MyViewModel {
    public string MainText { get; set; }
    public string DetailText { get; set; }
}

当用户单击行时,行详细信息可见。是否有可能隐藏该行并仅显示选择的详细信息?

4

1 回答 1

0

您可以编辑ControlTemplate每个DataGridRow选项以在选择它时隐藏其主要内容。

例如,您可以使用MSDN在此处Style提供的内容。这是一个很大的风格,所以我只会在这里粘贴重要的部分:

<Style TargetType="{x:Type DataGridRow}">
  <!-- ...some setters... -->
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type DataGridRow}">
        <Border x:Name="DGR_Border"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                SnapsToDevicePixels="True">
          <Border.Background>
              <!-- ... -->
          </Border.Background>
          <VisualStateManager.VisualStateGroups>
            <!-- ...some states... -->
          </VisualStateManager.VisualStateGroups>
          <SelectiveScrollingGrid>
            <SelectiveScrollingGrid.ColumnDefinitions>
              <ColumnDefinition Width="Auto" />
              <ColumnDefinition Width="*" />
            </SelectiveScrollingGrid.ColumnDefinitions>
            <SelectiveScrollingGrid.RowDefinitions>
              <RowDefinition Height="*" />
              <RowDefinition Height="Auto" />
            </SelectiveScrollingGrid.RowDefinitions>
            <DataGridCellsPresenter Grid.Column="1"
                                    ItemsPanel="{TemplateBinding ItemsPanel}"
                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            <DataGridDetailsPresenter Grid.Column="1"
                                      Grid.Row="1"
                                      Visibility="{TemplateBinding DetailsVisibility}"
                                      SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, 
                                                    ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical},
                                                    Converter={x:Static DataGrid.RowDetailsScrollingConverter}, 
                                                    RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
            <DataGridRowHeader Grid.RowSpan="2"
                               SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
                               Visibility="{Binding HeadersVisibility, 
                                            ConverterParameter={x:Static DataGridHeadersVisibility.Row}, 
                                            Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
                                            RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
          </SelectiveScrollingGrid>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

关键是在选择时将 的更改Visibility为。您可以通过在模板中添加以下标记来做到这一点:DataGridCellsPresenterVisibility.CollapsedDataGridRow<DataGridCellsPresenter.Style>

<DataGridCellsPresenter Grid.Column="1"
                        ItemsPanel="{TemplateBinding ItemsPanel}"
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
    <DataGridCellsPresenter.Style>
        <Style TargetType="DataGridCellsPresenter">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridCellsPresenter.Style>
</DataGridCellsPresenter>

如果您再次测试应用程序,这将折叠所选行上的主要内容,因此仅显示详细信息行。

于 2020-03-19T14:32:02.587 回答