2010-05-27 99 views
2

我打算编写一个分层组织控件,类似于组织结构图。几个组织结构图的实现在那里,但不太适合我的想法。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结合丢失。

+0

你是否在任何地方设置NodeBodyBlock的内容?您似乎设置了DataContext,但您的ContentPresenter绑定到Content而不是DataContext。 – Stephan 2010-05-28 15:15:16

回答

0

你的控制模板丢失的ContentPresenter的绑定,它应该是这样的: -

    <ContentPresenter Content="{TemplateBinding Content}" 
         ContentTemplate="{TemplateBinding ContentTemplate}" 
         HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
+0

我按照您的建议更新了ContentPresenter定义,但没有区别(尚未)。还是)感谢你的建议! – Ryan 2010-05-28 12:09:52

相关问题