-1

在 WPF 项目中,我有一堆控件,我希望能够在其中设置单个Margin属性并保存其他值。因此,我想避免将完整边距设置为新的Thickness( Margin="0,5,0,15")。因为许多边距是从样式等设置的。但在个别情况下,我想偏离某些控件的通用样式。

我想,为什么不像这样在 .NET 类上注册几个新的依赖属性FrameWorkElement(例如只显示 MarginLeft):

public class FrameWorkElementExtensions: FrameworkElement
{
    public static readonly DependencyProperty MarginLeftProperty = DependencyProperty.Register("MarginLeft", typeof(Int16?), typeof(FrameworkElement), new PropertyMetadata(null, OnMarginLeftPropertyChanged));
    public Int16? MarginLeft
    {
        get { return (Int16?)GetValue(MarginLeftProperty); }
        set { SetValue(MarginLeftProperty, value); }
    }

    private static void OnMarginLeftPropertyChanged(object obj, DependencyPropertyChangedEventArgs e)
    {
        if (obj != null && obj is UIElement)
        {
            FrameworkElement element = (FrameworkElement)obj;

            element.Margin = new Thickness((Int16?)e.NewValue ?? 0, element.Margin.Top, element.Margin.Right, element.Margin.Bottom);
        }
    }
}

但此属性在代码隐藏或 XAML 中不可用。我能以某种方式理解它,因为这个虚拟类永远不会被实例化。试图使它成为一个静态类,但你不能从 FrameWorkElement 派生(我需要 GetValue 和 SetValue 方法)。

我在网上找不到任何处理更通用问题的资源:您可以将依赖项属性添加到现有的 .NET 类吗?

感谢任何帮助/明智的建议。

顺便说一句:仅更改边距(厚度)的一个组件的解决方案也值得赞赏;)

4

2 回答 2

4

如果要定义要在不属于您的对象上设置的属性,则要定义附加属性,在这种情况下,您将使用RegisterAttached方法而不是 Register。此外,您可以将属性定义为静态 get/set 方法而不是实例属性,因为这不会设置在对象的实例上,而是设置在某个未知的框架元素上。链接中的帮助主题显示了一个示例。其他评论中的链接也提供了更多信息和示例。

于 2013-01-14T13:26:57.953 回答
-1

如果您只想更改 xaml Margin="1,2,3,4" 中使用的边距的一个组件,其中 1 - 左,2 - 上,3 - 右,4 - 下

于 2013-01-14T13:15:15.237 回答