2011-03-07 45 views
5

我试图建立一个用户控件至极能够采取元素从XAML这样的:如何在WPF用户控件一样创建组合框

  <ComboBox > 
       <ComboBoxItem /> 
       <ComboBoxItem /> 
       <ComboBoxItem /> 
      </ComboBox> 

ComboBox,你可以添加ComboBox之间的项目标签,我想复制这个,但我不知道从哪里开始。

完成了它应该是这样的:

<cis:ReportControl Grid.Row="3"> 
      <cis:ReportItem /> 
    </cis:ReportControl> 

cis:ReportControl,也有一些Button S和ComboBox,基本上我只是想与项目喂ComboBox

该报告项目只是一个ComboBoxItem与一些额外的属性。

编辑:

我根据@Snowbears答案实现了它,但现在的问题是,控制其自身作为一个项目。 我认为这是因为我有一些内容,并通过将ContentProperty定义为我的ComboBox,它被重定向到Box中。 我能做些什么来避免这种情况?

编辑II:

它完全与这个工程现在:

private ItemCollection reportItems; 
    public ItemCollection ReportItems 
    { 
     get 
     { 
      if (reportItems == null) 
      { 
       reportItems = this.ComboBoxReports.Items; 
      } 
      return reportItems; 
     } 
    } 

[ContentProperty("ReportItems")]属性。 ComboBoxReports是控件中的ComboBox,我不得不继承ItemsControl以使其起作用。

回答

4
  1. 你应该在你的UserControl中创建属性,这将会暴露一些实现IList接口的东西。假设这个属性将被命名为ReportItems。这个属性不应该有setter,它应该在UserControl自身中初始化,或者在构造函数中通过后台字段初始化。
  2. 用户控件上应标有ContentProperty属性与属性名称(ReportItems
  3. 内部组合框应该有它的ItemsSource势必用户控件的ReportItems财产
0

,如果你寻找到How Create own Control你必须寻找两件事情:

1)Custom Control1User Control1(这取决于您need
2)Dependency Properties(在控制使用它们)

我想你可能会需要使用定制的控制,你也可以从ComboBox或其他控件继承您的自定义控制能力。