我正在使用Datatemplate选择器检索的代码中创建Datatemplate。由于某些业务规则,我无法在xaml中创建datatemplate。我正在使用Devexpress' PropertyGridControl与海关财产定义。
datatemplate正在覆盖PropertyDefinition的CellTemplate,因此模板中的控件必须具有 x:Name =" PART_Editor" 。 datatemplate中的控件是TrackBarEdit,但它可以是任何编辑器控件。
以下是我的模板构建器的代码:
private DataTemplate BuildTemplate()
{
var trackbarFactory = new FrameworkElementFactory(typeof(MyTrackBar));
trackbarFactory.SetValue(RangeBaseEdit.MaximumProperty, 5.0);
trackbarFactory.SetValue(MyTrackBar.NameProperty,"PART_Editor");
var trackbarTemplate = new DataTemplate
{
VisualTree = trackbarFactory
};
trackbarTemplate.Seal();
var propDefinitionFactory = new FrameworkElementFactory(typeof(PropertyDefinition));
propDefinitionFactory.SetBinding(PropertyDefinitionBase.PathProperty,new Binding(nameof(PropertyStore.Name)));
propDefinitionFactory.SetBinding(PropertyDefinitionBase.IsReadOnlyProperty,new Binding("Metadata.ForceReadOnly"));
propDefinitionFactory.SetValue(PropertyDefinition.CellTemplateProperty,trackbarTemplate);
var propDefinitionTemplate = new DataTemplate
{
VisualTree = propDefinitionFactory
};
propDefinitionTemplate.Seal();
return propDefinitionTemplate;
}
控件正确渲染所有绑定,但我无法弄清楚如何通过frameworkElementFactory设置 x:Name 。我试图设置 FrameworkElement.NameProperty ,甚至继承TrackbarEdit来创建一个新的DependencyProperty,通过 RuntimeNamePropertyAttribute 映射到x:Name但是它不起作用。
因此,渲染的编辑器不会更新绑定属性的值。