Змінити властивість 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;
}

Хтось знає, що це робити для синтаксису?

Відповіді:


165
Canvas.SetLeft(theObject, 50)


+1, треба любити безпеку типу. Мені цікаво, чому SetLeft бере UIElement замість DependencyObject
JaredPar

4
@JaredPar: напевно, я б сказав, що оскільки SetLeft - це спеціально метод Canvas, він розуміє, яким типам має сенс надати властивість Left. Він вважає, що це UIElement, це, можливо, збільшує виявлення несправного коду, коли йому випадково передається неправильна змінна.
AnthonyWJones

msdn.microsoft.com/en-us/library/… Canvas.Left - це вкладене властивість, яке підтримує використання XAML. Встановлюючи цю властивість у коді, використовуйте замість цього SetLeft.
Yury Schkatula

50

Спробуйте це

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

Існує група методів на DependencyObject (база більшості класів WPF), які надають спільний доступ до всіх властивостей залежностей. Вони є

  • SetValue
  • GetValue
  • ClearValue

Редагувати Оновлено набір для використання подвійного літералу, оскільки цільовим типом є подвійний.


Дякую, щоб це працювало, мені довелося привести ціле число: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay

Ні, для цього вкажіть числову константу у подвійному форматі: heObject.SetValue (Canvas.LeftProperty, 50.0);
Будда

12

Оскільки ми змінюємо властивість 'object', було б краще використовувати метод suggedte від JaredPar:

theObject.SetValue(Canvas.LeftProperty, 50d);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.