嗨,我熟悉Windows窗体,现在我要启动WPF,在Windows中,我使用以下递归方法重置控件
internal void clrCntrls(Control cntrl)
{
if (cntrl.GetType() == typeof(TextBox))
{
TextBox cntrl = (TextBox)cntrl;
cntrl.Text = "";
}
else if (cntrl.GetType() == typeof(ComboBox))
{
ComboBox cntrl = (ComboBox)cntrl;
cntrl.SelectedIndex = -1;
}
else
{
foreach (Control subCntrl in _cntrl.Controls)
{
clrCntrls(subCntrl);
}
}
在Windows中对我来说效果很好,但是在WPF中我该如何做。我对此有些困惑。请帮忙。
您可以尝试使用VisualTreeHelper
,但它仅适用于可视树中当前存在的控件(即渲染的控件)。如果您有一个TabControl
,则将无法访问TabItem
当前未选择的上的控件。
这是一个快速尝试:
private void ClearControls(DependencyObject root)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
{
var control = VisualTreeHelper.GetChild(root, i);
if (control is TextBox)
{
(control as TextBox).Text = String.Empty;
}
else if (control is ComboBox)
{
(control as ComboBox).Text = String.Empty;
}
else if (VisualTreeHelper.GetChildrenCount(control) > 0)
{
ClearControls(control);
}
}
}
我的建议是改为利用MVVM模式。在这种情况下,您将控件内容绑定到视图模型类中的属性。在这种情况下,要清除所有控件,只需替换DataContext
为视图模型类的新实例即可。有关详细信息,请查看HighCore的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句