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;
}
Kommentare zum Snippet