您最好的選擇是對的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);
}
}
希望這有助於。
+1令人驚歎的清晰度和WPF命令。 –
Thx並且如果它解決了您的問題,請接受它作爲答案。 –
是的,就像一個魅力! –