103 votes

Changer la propriété Canvas.Left dans le code derrière ?

J'ai un rectangle dans mon XAML et je veux changer sa forme. Canvas.Left 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 ça ne marche pas :

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

Quelqu'un sait-il quelle est la syntaxe pour faire cela ?

173voto

AnthonyWJones Points 122520
Canvas.SetLeft(theObject, 50)

0 votes

+1, il faut aimer la sécurité du type. Je suis cependant curieux de savoir pourquoi SetLeft prend un UIElement au lieu d'un DependencyObject.

4 votes

@JaredPar : à vue de nez, je dirais que puisque SetLeft est spécifiquement une méthode de Canvas, il comprend à quels types il serait logique de donner une propriété Left. Il considère que c'est UIElement, ce qui augmente peut-être la détection de code défectueux où accidentellement la mauvaise variable lui est passée.

0 votes

msdn.microsoft.com/fr/us/library/ Canvas.Left est une propriété attachée, qui supporte une utilisation XAML. Lorsque vous définissez cette propriété dans le code, utilisez plutôt SetLeft.

57voto

JaredPar Points 333733

Essayez ceci

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

Il existe 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 la dépendance. Ces méthodes sont

  • SetValue
  • GetValue
  • ClearValue

Editar Mise à jour de l'ensemble pour utiliser un double littéral puisque le type cible est un double.

0 votes

Merci, pour que cela fonctionne, j'ai dû convertir le nombre entier : theObject.SetValue(Canvas.LeftProperty, (double)50) ;

0 votes

Non, pour cela, il faut spécifier une constante numérique au format double : heObject.SetValue(Canvas.LeftProperty, 50.0) ;

12voto

Budda Points 5575

Comme nous changeons la propriété de l'objet, il serait préférable d'utiliser la méthode suggérée par JaredPar :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X