尝试在WPF中构建查询生成器控件

时间:2012-08-10 04:57:39

标签: c# wpf user-controls treeview telerik

请问我这个问题的长度,我试着尽量描述。我是WPF编程的新手。我基本上是在尝试构建RadDataFilter control

RadDataFilter用于通过构建查询表达式来过滤集合。通常通过从数据库中提取所有数据然后对其进行过滤来使用

但是,我正在尝试使用它来构建SQL查询表达式然后我查询数据库以检索数据。我们公司拥有Telerik产品的许可证,因此我不得不尝试使用该控件。不幸的是,控件在我想要customize the Left Dropdown(RadComboBox)的范围内并不灵活。

由于我们有几个用户可以过滤的项目,因此为它们提供单个dropdpwn是不可行的。我想要一个自定义控件而不是下拉列表。

我对此问题有以下解决方法:

  • 提取该控件的模板,并按照here所述在我的XAML中覆盖它。但是,尽管如此,我无法改变控制。我认为这是由于我对WPF的了解不足。

  • 尝试更改Telerik的源代码(我们也拥有代码许可证)。但是,通过这种方法,我们需要在每次升级时不断进行更改,这对团队来说是一种高度维护。

  • 尝试构建自定义控件。

我正在寻找第三种方法。如果有一种简单的方法(使用前两种方法)或任何其他解决方案来实现这一点,请告诉我,我会尝试。

为了实现第3种方法,我想使用TreeView与每个节点使用ControlTemplate(包含我的自定义控件)。我将覆盖自定义控件的ToString()方法,该方法为我提供了一个查询条件。完成后,我将遍历根节点的子节点以构建最终的查询表达式。

然而,正如我所注意到的,我们需要2个不同的ControlTemplates(一个允许创建过滤器表达式,另一个允许使用运算符,类似于RadDataFilter)。我不知道如何设置这样的多个模板。

这对一些开发人员来说听起来很简单,但我对C#和WPF编程很陌生,需要时间和经验来适应它。

如果您知道我可以尝试解决此问题的任何其他解决方案,请告诉我。如果您觉得创建自定义控件更好,请引导我了解实现此目的的最佳方法。还要评论我创建自定义控件的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

我解决了。采取第一种方法:

“提取该控件的模板并按照here所述在我的XAML中覆盖它。”