Canvas.Left özelliği arkasındaki kodda değiştirilsin mi?


98

XAML'imde bir dikdörtgen var ve Canvas.Leftarkasındaki koddaki özelliğini değiştirmek istiyorum :

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

Ama bu işe yaramıyor:

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

Bunu yapmak için sözdiziminin ne olduğunu bilen var mı?

Yanıtlar:


165
Canvas.SetLeft(theObject, 50)


+1, güvenliği sevmeli. SetLeft'in DependencyObject yerine neden UIElement aldığını merak ediyorum
JaredPar

4
@JaredPar: Tahminime göre SetLeft özellikle bir Canvas yöntemi olduğundan, hangi türlere Left özelliği vermesinin mantıklı olacağını anladığını söyleyebilirim. Bunu UIElement olarak kabul eder, bu belki de yanlışlıkla yanlış değişkenin kendisine iletildiği durumlarda hatalı kodun tespitini artırır.
AnthonyWJones

msdn.microsoft.com/en-us/library/… Canvas.Left, XAML kullanımını destekleyen ekli bir özelliktir. Bu özelliği kodda ayarlarken bunun yerine SetLeft'i kullanın.
Yury Schkatula

51

Bunu dene

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

DependencyObject'te (çoğu WPF sınıfının temeli), tüm bağımlılık özelliklerine ortak erişime izin veren bir grup yöntem vardır. Onlar

  • SetValue
  • Değer elde etmek
  • ClearValue

Düzenle Hedef türü bir double olduğundan set, çift hazır bilgi kullanacak şekilde güncellendi.


Teşekkürler, bunu çalıştırmak için tamsayıyı çevirmem gerekiyordu: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay

Hayır, bunun için sayısal sabiti çift formatta belirtin: heObject.SetValue (Canvas.LeftProperty, 50.0);
Budda

12

'Nesnenin' özelliğini değiştirirken, JaredPar tarafından önerilen yöntemi kullanmak daha iyi olacaktır:

theObject.SetValue(Canvas.LeftProperty, 50d);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.