如何在WPF中使用FrameworkElementFactory设置x:Name?

时间:2017-09-06 14:47:56

标签: c# wpf datatemplate devexpress-wpf

我正在使用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但是它不起作用。

因此,渲染的编辑器不会更新绑定属性的值。

0 个答案:

没有答案