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?

Jawaban:


165
Canvas.SetLeft(theObject, 50)


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.


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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.