我打算编写一个分层的组织控制,类似于组织结构图。有几个组织结构图实现,但不太符合我的想法。
将DataTemplate
中的字段绑定到自定义对象似乎不起作用。
我开始使用通用的自定义控件,即
public class NodeBodyBlock : ContentControl
{
public NodeBodyBlock()
{
this.DefaultStyleKey = typeof(NodeBodyBlock);
}
}
generic.xaml
中有一个简单的样式:
<Style TargetType="org:NodeBodyBlock">
<Setter Property="Width" Value="200" />
<Setter Property="Height" Value="100" />
<Setter Property="Background" Value="Lavender" />
<Setter Property="FontSize" Value="11" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="org:NodeBodyBlock">
<Border Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
Background="{TemplateBinding Background}" CornerRadius="4" BorderBrush="Black" BorderThickness="1" >
<Grid>
<VisualStateManager/> ... clipped for brevity
</VisualStateManager.VisualStateGroups>
<ContentPresenter Content="{TemplateBinding Content}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我现在的计划是能够使用这个通用定义作为排序的基本定义,其定制版本用于显示不同类型的内容。
一个简单的例子是在具有以下样式的用户控件上使用它:
<Style TargetType="org:NodeBodyBlock" x:Key="TOCNode2">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=NodeTitle}"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
和一个定义为
的实例<org:NodeBodyBlock Style="{StaticResource TOCNode2}" x:Name="stTest"
DataContext="{StaticResource DummyData}" />
DummyData
定义为
<toc:Node NodeNumber="mynum" NodeStatus="A"
NodeTitle="INLine Node Title!"
x:Key="DummyData"/>
在它后面有一个简单的C#类,其中每个字段都是公共属性。
运行应用程序时,虚拟数据值根本不会显示在GUI中。一个简单的测试,如
<TextBlock Text="{Binding NodeTitle}" DataContext="{StaticResource DummyData}"/>
工作正常。
关于我错过情节的任何想法?
更新:绑定到generic.xaml
中定义中的datacontext工作正常,但ContentPresenter
中的任何绑定都会丢失。
答案 0 :(得分:0)
您的控件模板缺少ContentPresenter
上的绑定,它应如下所示: -
<ContentPresenter Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
答案 1 :(得分:0)
我最后以这个例子为基础:
不太确定我错过了什么,但示例有效。