可以使用附属的属性。事实上,这正是附加属性的目的:访问父元素属性或向特定元素添加附加功能。
例如,在应用程序中的某处定义以下类:
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;
}
}
}
}
}
现在您的XAML所有你必须做的就是声明如下命名空间:
xmlns:ap="clr-namespace:YourApp.AttachedProperties"
然后你就可以写XAML如下所示:
<Button ap:MoreProps.MarginRight="10" />
或者,可以避免使用附加属性,而是写一些稍微更冗长XAML如:
<Button>
<Button.Margin>
<Thickness Right="10" />
</Button.Margin>
</Button>
这XAML在最后的是同样的事情'保证金=“0,0,10,0”'你覆盖现有的'Thickness'如果有是一个。 –
@ H.B。谢谢,我应该已经测试了最后一部分。你是对的。整个保证金将被重新分配,任何未指定的值将被返回到默认值。我编辑了标记该部分的答案。 – bugged87