设置绑定边距

我有一个绑定值,返回一个int,表示我不能分配给元素的左右边距的值。

inheritance人我试过但它不会编译。

如果我设置整个边距,它可以工作,但我只想要左右。

XAML:

 

类:

 public int BondIndent { get { return _bondSequence * 5; } } 

退还保证金?

 public Thickness Margin { get { return new Thickness(BondIndent,0,BondIndent,0);} } 

然后改变:

  

您可能需要使用ValueConverter 。 就像是:

 public class LeftRightThicknessConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is int) { int margin = (int)value; return Thickness(margin, 0, margin, 0); } return Thickness(); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 

然后,您可以按以下方式使用转换器:

       

假设xxx是有效的xml命名空间。

而不是返回一个int你可以返回一个厚度 , Margin实际上是:

 public Thickness BondIndent { get { int margin = _bondSequence * 5; return new Thickness(margin, 0, margin, 0); } } 

您的示例之所以有效,是因为Thickness重载了需要1,2或4个参数的构造函数。 当调用带有1个参数的构造函数时,所有边都被初始化为该值。 WPF会根据绑定值自动将其转换为Thickness

在另一个话题上, BondThickness现在最好被称为BondMarginBondThickness

刚写了一些附加属性,可以很容易地从绑定或静态资源设置单个Margin值:

WPF:

 public class Margin { public static readonly DependencyProperty LeftProperty = DependencyProperty.RegisterAttached( "Left", typeof(double), typeof(Margin), new PropertyMetadata(0.0, LeftChanged)); private static void LeftChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var frameworkElement = d as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness((double)e.NewValue, currentMargin.Top, currentMargin.Right, currentMargin.Bottom); } } public static void SetLeft(UIElement element, double value) { element.SetValue(LeftProperty, value); } public static double GetLeft(UIElement element) { return 0; } public static readonly DependencyProperty TopProperty = DependencyProperty.RegisterAttached( "Top", typeof(double), typeof(Margin), new PropertyMetadata(0.0, TopChanged)); private static void TopChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var frameworkElement = d as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, (double)e.NewValue, currentMargin.Right, currentMargin.Bottom); } } public static void SetTop(UIElement element, double value) { element.SetValue(TopProperty, value); } public static double GetTop(UIElement element) { return 0; } public static readonly DependencyProperty RightProperty = DependencyProperty.RegisterAttached( "Right", typeof(double), typeof(Margin), new PropertyMetadata(0.0, RightChanged)); private static void RightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var frameworkElement = d as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, currentMargin.Top, (double)e.NewValue, currentMargin.Bottom); } } public static void SetRight(UIElement element, double value) { element.SetValue(RightProperty, value); } public static double GetRight(UIElement element) { return 0; } public static readonly DependencyProperty BottomProperty = DependencyProperty.RegisterAttached( "Bottom", typeof(double), typeof(Margin), new PropertyMetadata(0.0, BottomChanged)); private static void BottomChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var frameworkElement = d as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, currentMargin.Top, currentMargin.Right, (double)e.NewValue); } } public static void SetBottom(UIElement element, double value) { element.SetValue(BottomProperty, value); } public static double GetBottom(UIElement element) { return 0; } } 

UWP:

 public class Margin { public static readonly DependencyProperty LeftProperty = DependencyProperty.RegisterAttached( "Left", typeof(double), typeof(Margin), new PropertyMetadata(0.0)); public static void SetLeft(UIElement element, double value) { var frameworkElement = element as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(value, currentMargin.Top, currentMargin.Right, currentMargin.Bottom); } } public static double GetLeft(UIElement element) { return 0; } public static readonly DependencyProperty TopProperty = DependencyProperty.RegisterAttached( "Top", typeof(double), typeof(Margin), new PropertyMetadata(0.0)); public static void SetTop(UIElement element, double value) { var frameworkElement = element as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, value, currentMargin.Right, currentMargin.Bottom); } } public static double GetTop(UIElement element) { return 0; } public static readonly DependencyProperty RightProperty = DependencyProperty.RegisterAttached( "Right", typeof(double), typeof(Margin), new PropertyMetadata(0.0)); public static void SetRight(UIElement element, double value) { var frameworkElement = element as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, currentMargin.Top, value, currentMargin.Bottom); } } public static double GetRight(UIElement element) { return 0; } public static readonly DependencyProperty BottomProperty = DependencyProperty.RegisterAttached( "Bottom", typeof(double), typeof(Margin), new PropertyMetadata(0.0)); public static void SetBottom(UIElement element, double value) { var frameworkElement = element as FrameworkElement; if (frameworkElement != null) { Thickness currentMargin = frameworkElement.Margin; frameworkElement.Margin = new Thickness(currentMargin.Left, currentMargin.Top, currentMargin.Right, value); } } public static double GetBottom(UIElement element) { return 0; } } 

用法:

  

好消息是它们不会覆盖边距上的其他值,因此您也可以将它们组合在一起。