[英]How to display the Canvas.Left I Canvas.Top property in the content button?
[英]How do I bind to Canvas.Left or Canvas.Top attached property in code behind?
我正在尝试创建一个可在Canvas
拖动的UserControl
。 我是MVVM
新手,也是WPF
新手(也是StackOverflow的新手)。
我有一个视图模型,它实现了INotifyPropertyChanged
,用于具有名为“Top”和“Left”的属性的新UserControl
。 我想将视图模型的Top和Left属性绑定到UserControl
的附加Canvas.Left
和Canvas.Top
。 由于我不会进入的原因,我不能使用任何XAML
。
这就是我实现我的Left(以及类似的Top)属性的方式(不确定如何使代码突出显示工作):
public class FooViewModel : INotifyPropertyChanged
{
// . . .
double _left;
public double Left
{
get { return _left; }
set
{
if(_left != value)
{
_left = value;
NotifyPropertyChanged("Left");
}
}
}
// . . .
}
这就是我实现'UserControl'的方式:
public class FooControl : UserControl
{
// . . .
private FooViewModel _vm;
public FooControl(FooViewModel vm)
{
_vm = vm;
this.DataContext = _vm;
Binding b = new Binding("Left");
b.Mode = BindingMode.TwoWay;
this.SetBinding(Canvas.LeftProperty, b);
// . . .
}
// . . .
}
为了测试,我手动创建了一些视图模型实例,在它们上设置了Left和Top属性,通过将这些实例传递给构造函数创建了UserControl
的实例,并将它们添加到'Canvas'中。 不幸的是,我添加的所有控件都显示在'Canvas'的左上角,调试器显示正确设置了视图模型的Top和Left属性,调用Canvas.GetLeft(...)
和Canvas.GetTop(...)
上的Canvas.GetTop(...)
返回NaN
。
我究竟做错了什么? 我采取了错误的做法吗?
我试图围绕这个问题和答案建立我的代码。
编辑:实际上,这确实有效! 我的代码中有错误, UserControl
没有获得对视图模型实例的正确引用。 一旦我正确地连接它,它工作正常。 感谢大家!
该代码应该可以正常工作。
控件实际上是画布的直接子画面吗? 如果不是它将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.