私の回答は、Windowsフォーム8年以上前に投稿されたanswerに基づいています。以下
私はその答えと同じロジックを使用し、各要素の値を介して、透明なループにルートグリッドに拡張メソッドを作成した(バックその通常の状態にUserControl
をもたらすために、それを模倣)
であります拡張メソッド。
public static class Extensions
{
private static Dictionary<Type, Action<UIElement>> controldefaults = new Dictionary<Type, Action<UIElement>>()
{
{typeof(TextBox), c => ((TextBox)c).Text = String.Empty},
{typeof(CheckBox), c => ((CheckBox)c).IsChecked = false},
{typeof(ComboBox), c => ((ComboBox)c).SelectedIndex = 0},
{typeof(ListBox), c => ((ListBox)c).Items.Clear()},
{typeof(RadioButton), c => ((RadioButton)c).IsChecked = false},
};
private static void FindAndInvoke(Type type, UIElement control)
{
if (controldefaults.ContainsKey(type))
{
controldefaults[type].Invoke(control);
}
}
public static void ClearControls(this UIElementCollection controls)
{
foreach (UIElement control in controls)
{
FindAndInvoke(control.GetType(), control);
}
}
public static void ClearControls<T>(this UIElementCollection controls) where T : class
{
if (!controldefaults.ContainsKey(typeof(T))) return;
foreach (UIElement control in controls)
{
if (control.GetType().Equals(typeof(T)))
{
FindAndInvoke(typeof(T), control);
}
}
}
}
使用するには、RootGridに名前を付けます。たとえば、rootGrid
と言ってください。だから、あなたが呼び出す必要があるすべては、他の回答で述べたように、あなたが唯一の特定のコントロールをクリアしたい場合は、あなたが
rootGrid.Children.ClearControls<TextBox>();
を使用することができます。また
rootGrid.Children.ClearControls();
であるあなたは私のGist
に拡張クラスを見つけることができます
幸運。
出典
2017-04-26 16:09:29
AVK
あなたの提案をありがとう、残念ながら、これは動的なカスタムusercontrolsに適用することはできません、いくつかのコントロールは独自のデータを持って、私が探しているメソッドは、カスタムusercontrolの新しいインスタンスを作成するか、それを削除して、同じ名前の新しいものを追加します。 – Mhood