2009-02-12 7 views
88

Ich habe ein Rechteck in meiner XAML und wollen ihre Canvas.Left Eigenschaft im Code hinter sich ändern:Wie kann ich auf eine angehängte Eigenschaft im Code zugreifen?

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

Aber das funktioniert nicht:

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

Wer weiß, was die Syntax zu tun ist, Dies?

Antwort

146
Canvas.SetLeft(theObject, 50) 

+0

+1, muss Liebe Typ Sicherheit. Ich bin allerdings neugierig, warum SetLeft ein UIElement anstelle eines DependencyObject – JaredPar

+3

@JaredPar verwendet: Ich würde sagen, dass SetLeft spezifisch eine Methode von Canvas ist, und es versteht, welche Arten es sinnvoll wäre, eine Left-Eigenschaft zu geben. Es sieht dies als UIElement an, dies erhöht möglicherweise die Erkennung von fehlerhaftem Code, wo versehentlich die falsche Variable an ihn weitergegeben wird. – AnthonyWJones

+0

https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.canvas.left.aspx Canvas.Left ist eine angefügte Eigenschaft, die eine XAML-Verwendung unterstützt. Wenn Sie diese Eigenschaft im Code festlegen, verwenden Sie stattdessen SetLeft. –

46

Versuchen Sie, diese

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

Es gibt eine Gruppe von Methoden auf DependencyObject (Basis der meisten WPF-Klassen), die den gemeinsamen Zugriff auf alle Abhängigkeitseigenschaften ermöglichen. Sie sind

  • SetValue
  • GetValue
  • Clearvalue

bearbeiten den Satz Aktualisiert ein Doppel wörtlichen zu verwenden, da der Zieltyp ein doppelt so hoch ist.

+0

Vielen Dank an das ich musste an die Arbeit Wirf die ganze Zahl: theObject.SetValue (Canvas.LeftProperty, (double) 50); –

+0

Nein, hierzu geben Sie eine numerische Konstante im Doppelformat an: heObject.SetValue (Canvas.LeftProperty, 50.0); – Budda

12

Als wir die Eigenschaft des ‚Objekt‘ ändern, wäre es besser, Methode zu verwenden suggedte von JaredPar:

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