gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:52:58 24 4
gpt4 key购买 nike

从代码隐藏中很容易做到这一点:

var button = new Button();
var margin = button.Margin;
margin.Right = 10;
button.Margin = margin;

但是,在XAML中,我仅限于以下内容:
<Button Margin="0,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中,您所需要做的就是声明以下 namespace :
xmlns:ap="clr-namespace:YourApp.AttachedProperties"

然后,您可以编写如下的XAML:
<Button ap:MoreProps.MarginRight="10" />



另外,您可以避免使用附加属性,而编写一些稍长的XAML,例如:
<Button> <Button.Margin> <Thickness Right="10" /> </Button.Margin> </Button>

关于wpf - 如何仅修改WPF控件的Margin属性的右侧(或左侧,顶部,底部)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com