我需要重置帧上的所有字段,但在这样做时我需要disable textchanged event
为此,我尝试使用bool变量。像这样:
第一种让我能够在帧上找到所有TextBox
孩子的方法。
bool skipChange = false;
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
这使我能够找到某种类型的所有孩子并重置它。
我将其重置为:
public void resetForm() {
foreach (TextBox tb in FindVisualChildren<TextBox>(sPanelMain))
{
tb.Text = "";
}
}
最后我需要调用resetForm方法并禁用textchnged来激活。
private void btnAddForm_Click(object sender, RoutedEventArgs e)
{
skipChange = true;
resetForm();
skipChange = false;
}
private void PDText_TextChanged(object sender, TextChangedEventArgs e)
{
if (skipChange) { return; }
....
}
通过这种方式,如果skipChange
为真,我会尝试退出TextChanged方法。
但是在TextChanged方法中,skipChange始终为false,尽管我在调用之前将其设置为true。
感谢名单