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