在代码后台更改 Canvas.Left 属性?
在代码后台更改 Canvas.Left 属性?
我在XAML中有一个矩形,并且想在代码中改变它的Canvas.Left属性:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300" KeyDown="txt_KeyDown"> Name="theObject" Canvas.Top="20" Canvas.Left="20" Width="10" Height="10" Fill="Gray"/>
但是这样不起作用:
private void txt_KeyDown(object sender, KeyEventArgs e)
{
theObject.Canvas.Left = 50;
}
有人知道如何正确语法吗?
问题的出现原因是在代码中需要改变Canvas.Left属性的值。然而,直接在代码中改变这个属性的值可能会导致一些问题。为了解决这个问题,可以采用JaredPar提供的方法:theObject.SetValue(Canvas.LeftProperty, 50d);
。
解决方法就是使用SetValue
方法来改变Canvas.Left属性的值。这个方法可以接受两个参数,第一个参数是要改变的属性,第二个参数是要设置的值。在这个例子中,我们需要改变的属性是Canvas.LeftProperty,要设置的值是50d。
通过使用SetValue
方法,我们可以避免直接改变属性值可能引发的问题。这种方法更加安全可靠,因为它会处理属性值的更新并触发相应的事件。
总结起来,要在代码中改变Canvas.Left属性的值,可以使用SetValue
方法,并传入要改变的属性和要设置的值作为参数。这样可以避免可能出现的问题,并确保属性值的正确更新。
问题的原因是在代码中更改了Canvas.Left属性,但是没有成功。解决方法是使用DependencyObject类的SetValue方法来设置属性的值。代码应该使用double格式来指定数值常量。以下是完整的
尝试这样做:
theObject.SetValue(Canvas.LeftProperty, 50d);
在WPF的大多数类的基类DependencyObject上有一组方法,允许对所有依赖属性进行常规访问。它们是:
- SetValue
- GetValue
- ClearValue
感谢更新,使用双精度字面量来设置值,因为目标类型是double。
theObject.SetValue(Canvas.LeftProperty, 50d);
不,应该在这里使用双精度格式的数值常量:
theObject.SetValue(Canvas.LeftProperty, 50.0);
以上就是解决问题的原因和解决方法。
问题的出现原因:
在上述代码中,使用了Canvas.SetLeft方法来设置一个UIElement的左边距属性(Canvas.Left)。然而,代码中传递的参数类型是UIElement,而不是DependencyObject。为什么SetLeft方法接收UIElement参数而不是DependencyObject参数呢?可能的猜测是,由于SetLeft方法是Canvas类的特定方法,它了解哪些类型应该具有Left属性。它认为UIElement是具有Left属性的类型,这样可以提高检测到错误代码的几率,避免意外地将错误的变量传递给它。
解决方法:
根据Microsoft官方文档中的说明,Canvas.Left是一个附加属性(Attached Property),支持在XAML中使用。当在代码中设置这个属性时,应该使用SetLeft方法。
因此,解决这个问题的方法是将代码中的Canvas.SetLeft(theObject, 50)修改为Canvas.SetLeft(theObject, 50)。
参考链接:
https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.canvas.left.aspx