如何在WPF中创建类似于ComboBox的用户控件

5

我正在尝试构建一个用户控件,可以像这样从XAML中获取元素:

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

ComboBox 中,您只需在 ComboBox 标签之间添加项目,我想复制这个功能,但不知道从哪里开始。
完成后应该如下所示:
    <cis:ReportControl Grid.Row="3">
            <cis:ReportItem />
    </cis:ReportControl>

在中,有一些按钮和一个组合框,基本上我只想用项目来填充。

报告项只是一个带有一些额外属性的。

编辑:

我已经按照@Snowbears的答案实现了它,但现在问题是控件本身作为一个项目。 我认为这是因为我有一些内容,通过将定义为我的,它被重定向到框中。 我该怎么做才能避免这种情况?

编辑II:

现在完全可以使用以下内容:

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

使用[ContentProperty("ReportItems")]属性。ComboBoxReports是控件中的ComboBox,我不得不从ItemsControl继承才能使其正常工作。
2个回答

4
  1. 您应该在UserControl中创建一个属性,该属性将公开实现了IList接口的内容。假设此属性的名称为ReportItems。此属性不应具有setter,并且应在UserControl本身中初始化,可以在构造函数中或通过后备字段上的字段初始化来完成。
  2. UserControl应标记为带有ContentProperty属性和您的属性名称(ReportItems
  3. 内部组合框应将其ItemsSource绑定到UserControl的ReportItems属性

0

如果你正在寻找如何创建自己的控件,你需要注意以下两点:

  1. 自定义控件 1 或者 用户控件 1 (取决于你的需求
  2. 依赖属性(在控件中使用它们)

我认为你可能需要使用自定义控件。此外,你可以从ComboBox或其他控件继承你的自定义控件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接