我正在尝试将一行的两个点绑定到两个Ellipses,它们位于ScatterViewItems中。 目前,我能够将ActualCenter.X和.Y绑定到ScatterViewItem,但是因为椭圆不是ScatterViewItem中的唯一元素(也有标签),所以它偏离中心,例如线的端点不是椭圆的中心。
Ellipse没有ActualCenter属性。
我想知道我是否能够将属性绑定偏移一定量,或者我是否可以使用其他类型的绑定,以便我可以在容器类中找出正确的椭圆中心(对于ellipse,label和scatterviewitem),并将其作为绑定源返回。
以下是我设置绑定的代码。 this.avatar
指的是Line
形状。 node_one
和node_two
是容器对象,其中包含ScatterViewItem
。 Node
类还包含Ellipse
,我基本上喜欢它作为源的中心,但我对当前源的简单偏移感到满意。
BindingOperations.SetBinding(this.avatar, Line.X1Property, new Binding
{
Source = node_one.getScatterViewItem(),
Path = new PropertyPath("ActualCenter.X")
});
BindingOperations.SetBinding(this.avatar, Line.Y1Property, new Binding
{
Source = node_one.GetNodeCenterY(),
Path = new PropertyPath("GetNodeCenterY()")
});
// Bind line.(X2,Y2) to destination.ActualCenter
BindingOperations.SetBinding(this.avatar, Line.X2Property, new Binding
{
Source = node_two.getScatterViewItem(),
Path = new PropertyPath("ActualCenter.X")
});
BindingOperations.SetBinding(this.avatar, Line.Y2Property, new Binding
{
Source = node_two.GetNodeCenterY(),
Path = new PropertyPath("GetNodeCenterY()")
});
我尝试将Source
设置为node_one
,将Path
设置为new PropertyPath("getOffsetCenter()")
,它返回一个double,但它不起作用。它没有抱怨,但它没有工作:)任何提示赞赏:)
编辑,尝试使用IValueConverter:
[ValueConversion(typeof(Double), typeof(Double))]
public class OffsetValues : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime date = (DateTime)value;
Double y = (Double)value;
Double offset = (Double)parameter;
return y + offset;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Double dblValue = (Double)value;
Double offset = (Double)parameter;
Double resultDblValue = dblValue - offset;
return resultDblValue;
}
}
以上是作为一个新类添加的,但我如何将它附加到我的绑定源 - MSDN上的示例有一个基于XAML的实现,但我的是程序化的。
答案 0 :(得分:2)
你需要在后面的代码中写一些ValueConverter。
有关详细信息,请查看here。
答案 1 :(得分:2)
看起来您正在尝试将绑定设置为方法调用,而不是属性。绑定只能引用属性,因为绑定设置的依赖属性意味着指向属性的位置,而不是方法调用。
我见过人use a Converter to convert a Method to a Property value但是我自己没有使用过它。
作为旁注,我厌倦了总是编写转换器以使我的绑定偏移一定量,因此创建了我自己的Math Converter来执行此操作。要使用它,只需将ConverterParameter
设置为数学等式,@VALUE
代替绑定值,例如(@VALUE / 2) + 20
。如果您希望它使用多个绑定值,只需将其更改为MultiConverter