2009-02-12 7 views
88

J'ai un rectangle dans mon XAML et que vous voulez changer son Canvas.Left propriété dans le code derrière:Comment accéder à une propriété jointe dans le code derrière?

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

Mais cela ne fonctionne pas:

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

Est-ce que quelqu'un sait ce que la syntaxe est de faire ce?

Répondre

146
Canvas.SetLeft(theObject, 50) 

+0

+1, dois aimer la sécurité de type. Je suis curieux de savoir pourquoi si SetLeft prend UIElement au lieu d'un DependencyObject – JaredPar

+3

@JaredPar: à une supposition, je dirais que, depuis SetLeft est spécifiquement une méthode de toile, il comprend ce type, il serait logique donner une propriété à gauche. Il estime que cela est UIElement, cela augmente peut-être la détection de code défectueux où accidentellement la mauvaise variable lui est transmise. – AnthonyWJones

+0

https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.canvas.left.aspx Canvas.Left est une propriété attachée, qui supporte une utilisation de XAML. Lorsque vous définissez cette propriété dans le code, utilisez SetLeft à la place. –

46

Essayez cette

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

Il y a un groupe de méthodes sur DependencyObject (base de la plupart des classes WPF) qui permettent l'accès commun à toutes les propriétés de dépendance. Ils sont

  • SetValue
  • GetValue
  • ClearValue

Modifier Mis à jour le jeu d'utiliser un double littéral puisque le type de cible est double.

+0

Merci, pour obtenir ce travail que je devais cast l'entier: theObject.SetValue (Canvas.LeftProperty, (double) 50); –

+0

Non, pour cette spécifier constante numérique au format double: heObject.SetValue (Canvas.LeftProperty, 50,0); – Budda

12

Comme nous changeons la propriété du « objet », il serait préférable d'utiliser la méthode suggedte par JaredPar:

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