我打算编写一个分层组织控件,类似于组织结构图。几个组织结构图的实现在那里,但不太适合我的想法。Silverlight:将自定义控件绑定到任意对象
将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#类,其中每个字段都是公共pr operty。
运行应用程序时,Dummy Data值不会显示在GUI中。一个简单的测试,如
<TextBlock Text="{Binding NodeTitle}" DataContext="{StaticResource DummyData}"/>
工作得很好。
任何想法,我失踪的情节?
更新:绑定到该定义中的datacontext在generic.xaml
工作正常,但任何在ContentPresenter
结合丢失。
你是否在任何地方设置NodeBodyBlock的内容?您似乎设置了DataContext,但您的ContentPresenter绑定到Content而不是DataContext。 – Stephan 2010-05-28 15:15:16