Ubah properti Canvas.Left dalam kode di belakang?

98

Saya memiliki persegi panjang di XAML saya dan ingin mengubah Canvas.Leftpropertinya dalam kode di belakang:

<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>

Tapi ini tidak berhasil:

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

Adakah yang tahu apa sintaks untuk melakukan ini?

Edward Tanguay
sumber

Jawaban:

165
Canvas.SetLeft(theObject, 50)

AnthonyWJones
sumber
1, harus menyukai keamanan tipe. Saya penasaran mengapa SetLeft lebih memilih UIElement daripada DependencyObject
JaredPar
4
@ JaredPar: kira-kira saya akan mengatakan bahwa karena SetLeft secara khusus adalah metode Canvas, ia memahami jenis apa yang masuk akal untuk memberikan properti Left. Ini menganggap ini UIElement, ini mungkin meningkatkan deteksi kode yang salah di mana secara tidak sengaja variabel yang salah diteruskan ke sana.
AnthonyWJones
msdn.microsoft.com/en-us/library/… Canvas.Left adalah properti terlampir, yang mendukung penggunaan XAML. Saat menyetel properti ini dalam kode, gunakan SetLeft sebagai gantinya.
Yury Schkatula
50

Coba ini

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

Ada sekelompok metode pada DependencyObject (basis dari sebagian besar kelas WPF) yang memungkinkan akses umum ke semua properti ketergantungan. Mereka

  • SetValue
  • GetValue
  • ClearValue

Edit Memperbarui himpunan untuk menggunakan literal ganda karena jenis targetnya adalah ganda.

JaredPar
sumber
Terima kasih, agar ini bekerja saya harus memasukkan integer: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay
Tidak, untuk ini tentukan konstanta numerik dalam format ganda: heObject.SetValue (Canvas.LeftProperty, 50.0);
Budda
12

Saat kami mengubah properti 'object', akan lebih baik menggunakan metode suggedte oleh JaredPar:

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