如果我有一个派生自System.Windows.DispatcherObject
的对象,但定义了ControlTemplate
。
public class A : System.Windows.DependencyObject
{
public ControlTemplate ControlTemplate {get; set;}
}
是
的成员public class B
{
public A NonUIElement {get; set;}
}
是否可以通过绑定(例如
)渲染此对象<Border Name="Border">
<ContentPresenter Margin="5,0" Content="{Binding NonUIElement }"/>
</Border>
假设边框的DataContext
设置为B的实例?
答案 0 :(得分:3)
该对象将呈现,但不是我认为你希望的方式。 The Content
的{{1}}设置为A的实例。然后WPF尝试弄清楚如何呈现此A的实例。它首先要求,此对象是ContentPresenter
吗?在这种情况下,答案是否定的。接下来它会查找该类型的UIElement
。在这种情况下,A类没有DataTemplate
。所以它回到调用ToString()。因此,DataTemplate
将显示包含文字“YourNamespace.A”的ContentPresenter
。
A碰巧有类型TextBlock
的成员这一事实不会影响这种逻辑。对于WPF来说,这只是A恰好携带的一大块数据。当涉及控件并且ControlTemplate
被分配给ControlTemplate
属性时,仅WPF 使用 ControlTemplate
。
所以你需要为A提供Template
(当然可以访问DataTemplate
并使用它来呈现实例),或者创建一个名为ControlTemplate
并应用它通过DataTemplate
,或者来自ContentPresenter.ContentTemplate
。
答案 1 :(得分:0)
我终于得到了它;
<HierarchicalDataTemplate DataType="{x:Type vm:MapLayerModel}" ItemsSource="{Binding Path=Children, Mode=OneTime}">
**<ContentControl Margin="5" Content="{Binding LayerRepresentation}" Template="{Binding LayerRepresentation.ControlTemplate}" Mode=OneTime/>**
</HierarchicalDataTemplate>
这是关于WPF模板及其内容控制模型的一个很好的个人课程。再次感谢itowlson。