为后面的代码中的xaml元素设置多绑定
我有以下工作XAML代码,它基本上绑定了几个属性来计算我的用户控件的最终位置:
…
由于各种原因(但特别是为了避免相关来源,我现在正试图在代码中做同样的事情而没有成功。
这是我目前的代码:
public CurvePointControl(CurveEditor CV) { InitializeComponent(); MultiBinding multiBinding = new MultiBinding(); multiBinding.Converter = m_VToYConverter; multiBinding.Bindings.Add(new Binding("V")); multiBinding.Bindings.Add(new Binding(CV.MinVProperty)); // doesn't work multiBinding.Bindings.Add(new Binding(CV.MaxVProperty)); // doesn't work multiBinding.Bindings.Add(new Binding(CV.ActualHeight)); // doesn't work multiBinding.NotifyOnSourceUpdated= true; this.SetBinding(TranslateTransform.YProperty, multiBinding); //Doesn't work too: //BindingOperations.SetBinding(XTranslateTransform, TranslateTransform.YProperty, multiBinding); }
我仍然无法相信将XAML转换为c#代码是如此困难。 转换器被调用但只有一次且没有有效的属性值。
什么是错的? 我怎么能调试这样的问题?
你需要来源:
multiBinding.Bindings.Add(new Binding("V") { Source = curveEditPoint }); //If that object is accessible in the current scope. multiBinding.Bindings.Add(new Binding("MinV") { Source = CV }); multiBinding.Bindings.Add(new Binding("MaxV") { Source = CV }); multiBinding.Bindings.Add(new Binding("ActualHeight") { Source = CV });
字面翻译将是:
MultiBinding multiBinding = new MultiBinding(); multiBinding.Converter = m_VToYConverter; RelativeSource relativeSource = new RelativeSource() { AncestorType = typeof(CurveEditor) }; multiBinding.Bindings.Add(new Binding("V") { ElementName = "curveEditPoint" }); multiBinding.Bindings.Add(new Binding(CV.MinVProperty) { RelativeSource = relativeSource }); multiBinding.Bindings.Add(new Binding(CV.MaxVProperty) { RelativeSource = relativeSource }); multiBinding.Bindings.Add(new Binding(CV.ActualHeight) { RelativeSource = relativeSource });
但是,您可能会遇到ElementName正确解析的问题。 在这种情况下,您必须直接绑定到元素或“找到”它。 如果curveEditPoint是当前类中的一个字段,那么这样的东西就可以工作:
multiBinding.Bindings.Add(new Binding("V") { Source = this.curveEditPoint });
尝试使用
multiBinding.Bindings.Add(new Binding("MinVProperty") { ElementName = CV.Name });
代替
multiBinding.Bindings.Add(new Binding("CV.MinVProperty"));