微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何仅修改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;< /按钮>

原文地址:https://www.jb51.cc/css/217940.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。