Soru Ekteki bir mülkün arkasındaki kodda nasıl erişilir?


XAML'imde bir dikdörtgen var ve değiştirmek istiyorum. Canvas.Left arkasındaki özellik kodu:

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


90
2018-02-12 14:18


Menşei




Cevaplar:


Canvas.SetLeft(theObject, 50)


148
2018-02-12 14:24



+1, aşk tipi güvenlik lazım. SetLeft'ın neden bir DependencyObject yerine bir UIElement aldığını merak ediyorum. - JaredPar
@JaredPar: Tahmin edeyim ki SetLeft özel olarak bir Canvas yöntemi olduğu için, ne tür bir anlam taşıyacağını anlamak için bir Sol özelliği verir. Bu, UIElement olarak kabul edilir, bu, yanlışlıkla yanlış değişkenin kendisine iletildiği hatalı kod tespitini artırır. - AnthonyWJones
msdn.microsoft.com/en-us/library/... Canvas.Left, bir XAML kullanımını destekleyen ekli bir özelliktir. Bu özelliği kod olarak ayarlarken, bunun yerine SetLeft'i kullanın. - Yury Schkatula


Bunu dene

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

Tüm bağımlılık özelliklerine ortak erişime izin veren, bir çok Bağımlılık Nesnesi (çoğu WPF sınıfının tabanı) üzerinde bir yöntem grubu vardır. Onlar

  • SetValue
  • Değer elde etmek
  • ClearValue

Düzenle Hedef türü bir çift olduğu için seti bir çift değişmez kullanacak şekilde güncellendi.


46
2018-02-12 14:22



Teşekkürler, bunu işe almak için tamsayıyı yapmak zorunda kaldım: theObject.SetValue (Canvas.LeftProperty, (double) 50); - Edward Tanguay
Hayır, bunun için ikili sabit olarak sayısal sabiti belirtin: heObject.SetValue (Canvas.LeftProperty, 50.0); - Budda


'Nesnenin' özelliğini değiştirdikçe, JaredPar'ın yöntemine göre suggte kullanmak daha iyi olurdu:

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

12
2017-08-16 23:23