如何仅修改WPF控件的Margin属性的右侧(或左侧,顶部,底部)值?

代码隐藏中很容易做到这一点:
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;< /按钮>

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效