Eine angehängte Eigenschaft könnte verwendet werden. Tatsächlich ist dies genau der Zweck der angefügten Eigenschaften: Zugreifen auf Elternelementeigenschaften oder Hinzufügen zusätzlicher Funktionalität zu einem bestimmten Element.
Zum Beispiel definiert die folgende Klasse irgendwo in der Anwendung:
using System;
using System.Windows;
using System.Windows.Controls;
namespace YourApp.AttachedProperties
{
public class MoreProps
{
public static readonly DependencyProperty MarginRightProperty = DependencyProperty.RegisterAttached(
"MarginRight",
typeof(string),
typeof(MoreProps),
new UIPropertyMetadata(OnMarginRightPropertyChanged));
public static string GetMarginRight(FrameworkElement element)
{
return (string)element.GetValue(MarginRightProperty);
}
public static void SetMarginRight(FrameworkElement element, string value)
{
element.SetValue(MarginRightProperty, value);
}
private static void OnMarginRightPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
var element = obj as FrameworkElement;
if (element != null)
{
int value;
if (Int32.TryParse((string)args.NewValue, out value))
{
var margin = element.Margin;
margin.Right = value;
element.Margin = margin;
}
}
}
}
}
Jetzt in Ihrem XAML alles, was Sie tun müssen, ist die folgende Namespace deklariert:
xmlns:ap="clr-namespace:YourApp.AttachedProperties"
Und dann können Sie XAML schreiben wie die folgenden:
<Button ap:MoreProps.MarginRight="10" />
Alternativ können Sie auch eine angeschlossene Eigenschaft vermeiden, mit und stattdessen eine etwas längere XAML wie schreiben:
<Button>
<Button.Margin>
<Thickness Right="10" />
</Button.Margin>
</Button>
Das XAML am Ende ist das gleiche wie 'Margin =„0,0,10,0“', wie Sie überschreiben die vorhandene 'Thickness', wenn es ist ein. –
@ H.B. Danke, ich hätte diesen letzten Teil testen sollen. Du hast recht. Der gesamte Rand wird neu zugewiesen und alle nicht angegebenen Werte werden auf den Standardwert zurückgesetzt. Ich habe die Antwort bearbeitet, um diesen Teil zu markieren. – bugged87