从代码隐藏中很容易做到这一点:
var button = new Button(); var margin = button.Margin; margin.Right = 10; button.Margin = margin;
但是,在XAML中,我仅限于以下内容:
<Button Margin="0,10,0" />
这个问题是,现在我可能通过将其设置为零来覆盖其他边距值(即左边,顶部,底部).
有没有办法让XAML像下面那样?
<Button MarginRight="10" />
解决方法
可以使用附属物.实际上,这正是附加属性的目的:访问父元素属性或向特定元素添加其他功能.
例如,在应用程序的某处定义以下类:
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,例如:
<按钮和GT;< Button.Margin>< Thickness Right =“10”/>< /Button.Margin\u0026gt;< /按钮>