【问题标题】:How to reset all items in a groupbox, but not any items outside said groupbox?如何重置组框中的所有项目,但不重置所述组框之外的任何项目?
【发布时间】:2012-08-03 04:54:39
【问题描述】:
【问题讨论】:
标签:
c#
.net
wpf
reset
groupbox
【解决方案1】:
您可以使用this question 作为您需要的方法的来源。
首先你需要找到包含按钮的组框。为此,请使用 sender 参数表单单击事件,它引用被单击的按钮并从该问题的答案之一中调用 FindVisualParent 方法。这将为您提供组框。
然后通过FindVisualChildren<DependencyObject>方法查找所有ui元素。这将为您提供要清除的超级控件集。
那么这只是您引用的问题的循环。请注意,该问题是针对 winforms 而不是 wpf 的,因此您必须修改处理分组控件的 controldefaults 字典 ~(Panel GroupBox) 此处不需要(并且在 wpf 中不起作用)。
【解决方案2】:
你可以给每个控件添加一个标签,告诉你在控件中正在编辑哪个属性,然后在按下复位键时,你向上移动按钮以查找包含 GroupBox,然后向下查找包含在此 GroupBox 中的所有控件,然后您可以通过 TAG 找到需要重置的属性的名称。然后使用 Reflexion 重置属性。
也许一个问题是默认值可能并不明显。但是您可以将所有绑定的默认值存储在静态对象中,并将此重置对象的属性值复制到当前状态对象中。
Rq :您也可以使用反射来获取当前 GroupBox 的所有控件的绑定,然后从绑定中获取有界属性,因此不需要 TAG。但是,如果一个控件有多个绑定,您将不知道要重置哪一个。在我的例子中,GroupBoxes 中的控件还具有颜色绑定,以指示它们是否具有默认值(绿色)或非默认值(红色),因此需要一个 TAG。 (但颜色指示器是只读的,因此反射实际上也可以与反射的更多使用一起使用......当我看到它时我懒得改变工作逻辑:-))
我不知道你的绑定,所以很明显我不知道什么是最好的,我希望这能有所帮助。