我正在研究一组具有多个 DependencyProperties 的控件。属性本身就是 DependencyObject,并在属性的 get 方法期间创建。在 Get 方法期间,它们还使用 SetValue() 方法设置回属性包,因此它们实际上在 Xaml 中是有效的,并且它们的属性可以在情节提要中进行,而无需在可视化树中显式创建。
这些 DependencyObject 的所有属性也都作为 DependencyProperties,用于支持 DataBinding。如上所述,它们可以在情节提要中使用。
同时,我正在为这些属性开发 Blend 3 的特殊设计时支持,并以控件的形式创建了一个 InlineEditorTemplate。我创建模板并将其设置为 PropertyValueEditor,如下所示:
var vectorEditControl = new FrameworkElementFactory(typeof (VectorEditorControl));
var dataTemplate = new DataTemplate {VisualTree = vectorEditControl};
InlineEditorTemplate = dataTemplate;
在控件中,我有以下内容:
<Grid DataContext="{Binding Value}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Path=X, Mode=TwoWay}"/>
<TextBox Text="{Binding Path=Y, Mode=TwoWay}"/>
<TextBox Text="{Binding Path=Z, Mode=TwoWay}"/>
</StackPanel>
</Grid>
编辑器出现,我可以编辑数据。即使在调试时,我也看到它实际上将数据设置回 DependencyObjects 上的 DependencyProperties,但 Xaml 没有任何反应。所以数据实际上并没有以任何方式保存在 Xaml 中,并且当我关闭 Xaml 文件并再次打开它时会丢失。
我需要做些什么才能让它真正进入 Xaml 吗?我的印象是这会自动发生?