Feedback

Helfer für WPF Templates per Quellcode

Sprache: C#

Wandelt ein DependencyObject in ein Element zum Hinzufügen in ein Template, das per Code behind erzeugt wird. Es übersetzt die gesetzten Properties und Bindungen entsprechend. Anwendung wie folgt: // _child1Border, _child2Border sind FrameworkElementFactory-Elemente und dienen nur als Beispiel. var _gridEnd = gridEnd.AsTemplateElement(null); _gridEnd.AppendChild(_child1Border); _gridEnd.AppendChild(_child2Border); // Geben Sie die Bindings Properties und die Properties an, die behandelt werden sollen. var _end = end.AsTemplateElement(null, FrameworkElement.MarginProperty, Border.BorderBrushProperty, Border.BorderThicknessProperty, Border.CornerRadiusProperty, Border.PaddingProperty); _end.AppendChild(_gridEnd); owner.Template = ControlTemplate(typeof(GroupBox)) { VisualTree = _end };
public static FrameworkElementFactory AsTemplateElement<T>(this T source, ICollection<DependencyProperty> bindings, params DependencyProperty[] changedProperties)
where T : DependencyObject
{
	var result = new FrameworkElementFactory(typeof(T));

	// Die Initialisierungswerte des Objekts.
	foreach (var changedProperty in changedProperties)
	{
		result.SetValue(changedProperty, source.GetValue(changedProperty));
	}

	if (bindings != null)
	{
	    // Abschreiben der Bindungsdefinitionen.
		// Hinweis: Erfordert, dass die Bindung am "source"-Objekt an
		// der gleichen DependencyProperty gebunden ist (definiert).
		foreach (var dp in bindings)
		{
			result.SetBinding(dp, BindingOperations.GetBinding(source, dp));
		}
	}

	return result;
}
public static FrameworkElementFactory AsTemplateElement<T>(this T source, ICollection<DependencyProperty> bindings, params DependencyProperty[] changedProperties)
where T : DependencyObject
{
	var result = new FrameworkElementFactory(typeof(T));

	// Die Initialisierungswerte des Objekts.
	foreach (var changedProperty in changedProperties)
	{
		result.SetValue(changedProperty, source.GetValue(changedProperty));
	}

	if (bindings != null)
	{
	    // Abschreiben der Bindungsdefinitionen.
		// Hinweis: Erfordert, dass die Bindung am "source"-Objekt an
		// der gleichen DependencyProperty gebunden ist (definiert).
		foreach (var dp in bindings)
		{
			result.SetBinding(dp, BindingOperations.GetBinding(source, dp));
		}
	}

	return result;
}