单击行标题显示DataGrid行详细信息?

时间:2012-01-06 15:33:21

标签: c# wpf expression-blend

通常,单击某行时会显示行详细信息。我想禁用它,以便单击DataGrid行只是选择它但不显示行详细信息。我希望在用户单击行标题时显示行详细信息。我该怎么做?

1 个答案:

答案 0 :(得分:3)

要在单击行时阻止某人获取说明,请将此属性添加到网格中:

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

然后添加两个类型为ChangePropertyAction的行为,使用表达式混合是最简单的行为之一。

  1. 鼠标输入操作
    Properties Window in Blend for Mouse Enter

  2. 鼠标离开动作
    Properties Window in Blend for Mouse Leave

    这是鼠标在标题上移动之前的原始数据网格

    enter image description here


  3. 这是我将鼠标移到我的测试项目的datagrid dgPrimary上的时候。查看所有行描述是如何打开的 Result datagrid when mouse moves over it

    这是从blend到datagrid

    的代码
    <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>
    

    以及加载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 ) )
                                        } );