我正在使用一个WPF应用程序,它有许多组框,每个组包含3-4个控件。每个组框都包含一个重置按钮。
有没有办法让重置按钮只重置其包含的组合框的所有项目,而不是为每个项目明确写一行,组重置按钮应该重置?
在研究这个问题时,我发现以下帖子似乎有用,但我不确定如何扩展Nathan的答案:What is the best way to clear all controls on a form C#?
答案 0 :(得分:1)
您可以使用this question作为所需方法的来源。
首先,您需要找到包含按钮的groupbox。为此,请使用sender
参数表单点击事件,它是对单击的按钮的引用,并从该问题中的一个答案中调用FindVisualParent
方法。这将为您提供groupbox。
然后按FindVisualChildren<DependencyObject>
方法查找所有ui元素。这将为您提供要清除的超级控件集。
然后它就是你所引用的问题的循环。请注意,该问题仅适用于winforms而不是wpf,因此您必须修改处理分组控件的controldefaults
字典〜(Panel
GroupBox
)这里不需要(并且不起作用)在wpf)。
答案 1 :(得分:1)
您可以为每个控件添加一个TAG,告诉控件中哪个属性正在编辑,然后在重置按下时,向上移动按钮以查找包含GroupBox,然后向下移动以查找此GroupBox中包含的所有控件,然后您可以使用TAG找到需要重置的属性的名称。然后使用Reflexion重置属性
也许问题是默认值可能不明显。但是,您可以将所有绑定的默认值存储在静态对象中,并将此重置对象的属性值复制到当前状态对象中。
Rq:你也可以使用reflexion来获取当前GroupBox的所有控件的绑定,然后从绑定中获取有界属性,因此不需要TAG。但是如果一个控件有几个绑定,你将不知道要重置哪一个。在我的例子中,GroupBoxes中的控件也有一个颜色绑定,表明它们有默认值(绿色)或非默认值(红色),因此需要TAG。 (但是颜色指示器是只读的,所以反射实际上也可以使用更多的Reflexion ......当我看到它时,我只是懒得改变工作逻辑:-))
我不知道你的绑定,所以显然我不知道什么是最好的,我希望这可以帮助。