你最好在 infragistics netadvantage 论坛上问这个问题,但话虽如此......
据我了解,您想要的是一个只读数据网格(在其单元格上不可编辑)具有可编辑的行来添加新项目......
- 在
CellValuePresenter
. Style
_ XamDatagrid.Resources
_
- 这将检查给定的单元格值呈现器是否聚焦并表示添加新行。
如果是这样,它将通过一些附加行为使父字段可编辑。
<igDP:XamDataGrid Grid.Row="1"
DataSource="{Binding}"
AutoFit="True">
<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type igDP:CellValuePresenter}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsFocused,
RelativeSource={RelativeSource Self}}"
Value="True"/>
<Condition Binding="{Binding Record.IsAddRecord,
RelativeSource={RelativeSource Self}}"
Value="True"/>
</MultiDataTrigger.Conditions>
<Setter
Property="local:CellValuePresenterBehavior.AllowFieldEdit"
Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</igDP:XamDataGrid.Resources>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<!-- Only show the first 4 fields to keep the display simple -->
<igDP:Field Name="Key" Visibility="Visible">
<igDP:Field.Settings>
<igDP:FieldSettings
EditAsType="{x:Type System:String}"
EditorType="{x:Type Editors:XamTextEditor}"
AllowEdit="False"/>
</igDP:Field.Settings>
</igDP:Field>
<igDP:Field Name="Value" Visibility="Visible">
<igDP:Field.Settings>
<igDP:FieldSettings
EditAsType="{x:Type System:String}"
EditorType="{x:Type Editors:XamTextEditor}"
AllowEdit="False"/>
</igDP:Field.Settings>
</igDP:Field>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False"
AllowAddNew="True"
AddNewRecordLocation="OnTopFixed"
HighlightAlternateRecords="True"/>
</igDP:XamDataGrid.FieldLayoutSettings>
</igDP:XamDataGrid>
附加的行为如下......
public class CellValuePresenterBehavior
{
public static DependencyProperty AllowFieldEditProperty
= DependencyProperty.RegisterAttached(
"AllowFieldEdit",
typeof(bool),
typeof(CellValuePresenterBehavior),
new PropertyMetadata(false, OnAllowFieldEditChanged));
private static void OnAllowFieldEditChanged(
DependencyObject depObj,
DependencyPropertyChangedEventArgs args)
{
var cvp = depObj as CellValuePresenter;
if (cvp != null)
{
cvp.Field.Settings.AllowEdit = (bool)args.NewValue;
}
}
public static bool GetAllowFieldEdit(DependencyObject depObj)
{
return (bool) depObj.GetValue(AllowFieldEditProperty);
}
public static void SetAllowFieldEdit(DependencyObject depObj, bool value)
{
depObj.SetValue(AllowFieldEditProperty, value);
}
}
希望这可以帮助。