如何使XamDataGrid仅在第二次单击时编辑单元格

时间:2013-05-08 21:35:31

标签: wpf xaml infragistics

我有一个Infragistics XamDataGrid(使用2011.1 WPF),我想模仿文件浏览器(Finder / Windows资源管理器)或iTunes的行为,只需单击一下即可选择一行,以及第二次单击打开该字段的编辑器。正如我当前定义的那样,只需单击一下即可开始编辑所选行。我这样定义了我的网格:

<ig:XamDataGrid>
    <ig:XamDataGrid.FieldLayoutSettings>
        <ig:FieldLayoutSettings AutoGenerateFields="False" RecordSelectorLocation="None" />
    </ig:XamDataGrid.FieldLayoutSettings>
    <ig:XamDataGrid.FieldLayouts>
        <ig:FieldLayout>
            <ig:Field Name="Name" Width="*" />
        </ig:FieldLayout>
    </ig:XamDataGrid.FieldLayouts>
</ig:XamDataGrid>

1 个答案:

答案 0 :(得分:3)

我建议您将XamDataGrid的FieldSettings的CellClickAction设置为SelectRecord,并为CellValuePresenter创建一个Style并处理其PreviewMouseLeftButtonDown事件。在处理程序中,您应该检查单击的记录是否处于活动状态,如果是,则可以启动编辑模式。您可以像这样定义XamDataGrid:

<igDP:XamDataGrid >
    <igDP:XamDataGrid.Resources>
        <Style TargetType="{x:Type igDP:CellValuePresenter}">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="CellValuePresenter_PreviewMouseLeftButtonDown"/>
        </Style>
    </igDP:XamDataGrid.Resources>
    <igDP:XamDataGrid.FieldSettings>
        <igDP:FieldSettings CellClickAction="SelectRecord"/>
    </igDP:XamDataGrid.FieldSettings>
</igDP:XamDataGrid>

并使用以下事件处理程序:

private void CellValuePresenter_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if ((sender as CellValuePresenter).Record.IsActive)
    {
        (sender as CellValuePresenter).Editor.StartEditMode();
    }
} 

当您遇到与Infragistics相关的问题时,我建议您写入Infragistics论坛:

http://www.infragistics.com/community/forums/default.aspx?GroupID=38

因为它更易于跟踪,您将从Infragistics员工那里得到答案。

希望这会对你有所帮助。