将DataTemplate的内容绑定到另一个userControl

时间:2009-08-18 05:50:37

标签: c# .net silverlight user-interface xaml

你可以每天开心吗

我是银光新手

假设我正在编写一个包含DataTemplate的用户控件(名称为AAA.xaml),我希望通过数据绑定在其中拥有另一个用户控件(在BBB.xaml中定义)实例。

我在AAA.cs(AAA.xaml的c#文件)中初始化BBB用户控件的实例(名称为bbb),我想在AAA的xaml中使用这样的东西:

<DataTemplate>
   <someKindOfControl SomeAttributeOfControl={Binding bbb} />
<DataTemplate>

在AAA中显示BBB用户控件或者完全错误是否可行?如果它可以工作,我该怎么做才能正确绑定用户控件实例?我应该使用哪种控件?

2 个答案:

答案 0 :(得分:2)

我可能误解了您的问题,但您不需要使用绑定将一种控件的实例放入另一种控件的实例中。我建议从ContentControl派生someKindOfControl,然后你可以这样做:

<DataTemplate>
  <someKindOfControl>
    <bbb/>
  </someKindOfControl>
</DataTemplate>

请确保在someKindOfControl的默认样式中使用ContentPresenter - 这将确定bbb显示的位置。

另一方面,如果你想在someKindOfControl中插入许多控件,最好使用模板部件插入控件并为DataTemplate中的someKindOfControl提供样式:

<DataTemplate>
  <someKindOfControl Style={StaticResource SomeKindOfStyle}/>
<DataTemplate>

SomeKindOfStyle提供了一个ControlTemplate,它将许多类型的自定义控件放入someKindOfControl的各个模板部分:

<UserControl.Resources>
  <Style x:Name="SomeKindOfStyle" TargetType="myNamespace:someKindOfControl">
    <Setter Property="ControlTemplate">
      <Setter.Value>
        <ControlTemplate>
          <bbb x:Name="PART_TopRightControl/>
          <bbb x:Name="PART_BottomLeftControl/>
          <bbb x:Name="PART_CenterControl/>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</UserControl.Resources>

这有点复杂,但可以允许您将多个自定义bbb控件放入someKindOfControl的一个实例中。请记住,我并不完全确定你所追求的是什么,但如果你发布更多信息我可能会澄清。

答案 1 :(得分:0)

您无法绑定到数据模板中的用户控件。

数据模板是一种用户控件。