在后面的代码中更改Canvas.Left属性?


98

我的XAML中有一个矩形,想Canvas.Left在后面的代码中更改其属性:

<UserControl x:Class="Second90.Page"
    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">
    <Canvas>
        <Rectangle 
            Name="theObject" 
            Canvas.Top="20" 
            Canvas.Left="20" 
            Width="10" 
            Height="10" 
            Fill="Gray"/>
    </Canvas>
</UserControl>

但这不起作用:

private void txt_KeyDown(object sender, KeyEventArgs e)
{
    theObject.Canvas.Left = 50;
}

谁知道这样做的语法是什么?

Answers:


165
Canvas.SetLeft(theObject, 50)


+1,必须爱式安全。我很好奇,尽管为什么SetLeft采用UIElement而不是DependencyObject
JaredPar 2009年

4
@JaredPar:猜想我会说,因为SetLeft特别是Canvas的一种方法,所以它了解将Left属性赋予哪种类型是有意义的。它认为这是UIElement,这可能会增加对错误代码的检测,而错误的代码会意外地传递给错误代码。
AnthonyWJones

msdn.microsoft.com/zh-cn/library/…Canvas.Left是附加属性,支持XAML使用。在代码中设置此属性时,请改用SetLeft。
Yury Schkatula 2015年

50

试试这个

theObject.SetValue(Canvas.LeftProperty, 50d);

DependencyObject(大多数WPF类的基础)上有一组方法,这些方法允许对所有依赖项属性的公共访问。他们是

  • 设定值
  • 取值
  • 净值

编辑由于目标类型是双精度型,因此更新了该集以使用双精度型文字。


谢谢,要使其正常工作,我必须转换整数:theObject.SetValue(Canvas.LeftProperty,(double)50);
爱德华·坦格伊

不,为此,请以双格式指定数字常量:heObject.SetValue(Canvas.LeftProperty,50.0);
布达

12

当我们更改“对象”的属性时,最好使用JaredPar建议的方法:

theObject.SetValue(Canvas.LeftProperty, 50d);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.