Показать детали строки DataGrid, щелкнув заголовок строки? - PullRequest
2 голосов
/ 06 января 2012

Обычно детали строки отображаются при нажатии на строку. Я хочу отключить это, чтобы при щелчке строки DataGrid он просто выбирался, но не отображал детали строки. Я хочу, чтобы детали строки отображались, когда пользователь щелкает заголовок строки. Как бы я это сделал?

1 Ответ

3 голосов
/ 08 января 2012

Чтобы не дать кому-то получить описание при щелчке строки, добавьте этот атрибут в сетку:

<DataGrid Name="dgPrimary" RowDetailsVisibilityMode="Collapsed">

Затем добавляется два поведения типа ChangePropertyAction, использование выражения blend является одним из самых простых.

  1. Мышь вводит действие
    Properties Window in Blend for Mouse Enter

  2. Мышь оставь в покое
    Properties Window in Blend for Mouse Leave

    Вот исходная сетка данных перед тем, как мышь наведется на заголовки

    enter image description here



Вот когда я переместил указатель мыши на сетку данных моего тестового проекта dgPrimary. Посмотрите, как открылось описание всех строк.
Result datagrid when mouse moves over it

Вот код, прикрепленный от blend к сетке данных

<DataGrid x:Name="dgPrimary" RowDetailsVisibilityMode="Collapsed">
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <StackPanel Margin="20,0,0,0" Orientation="Horizontal">
                <TextBlock FontWeight="Bold" Text="{Binding New}" />

            </StackPanel>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Original}"
                            Header="File Name Before"
                            IsReadOnly="True" />
        <DataGridTextColumn Binding="{Binding New}"
                            Header="File Name After"
                            IsReadOnly="True" />
    </DataGrid.Columns>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseEnter">
            <ei:ChangePropertyAction PropertyName="RowDetailsVisibilityMode">
                <ei:ChangePropertyAction.Value>
                    <DataGridRowDetailsVisibilityMode>Visible</DataGridRowDetailsVisibilityMode>
                </ei:ChangePropertyAction.Value>
            </ei:ChangePropertyAction>
        </i:EventTrigger>
        <i:EventTrigger EventName="MouseLeave">
            <ei:ChangePropertyAction x:Name="cpaLeave" PropertyName="RowDetailsVisibilityMode"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</DataGrid>

И код для загрузки сетки данных

dgPrimary.ItemsSource = Directory.GetFiles( @"C:\" )
                                    .Select( ( nm, index ) => new
                                    {
                                        Original = System.IO.Path.GetFileName( nm ),
                                        New = string.Format( "{0}_{1}{2}", System.IO.Path.GetFileNameWithoutExtension( nm ), index, System.IO.Path.GetExtension( nm ) )
                                    } );
...