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