Modificare la proprietà Canvas.Left in code behind?


98

Ho un rettangolo nel mio XAML e voglio cambiare la sua Canvas.Leftproprietà nel codice sottostante:

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

Ma questo non funziona:

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

Qualcuno sa qual è la sintassi per farlo?

Risposte:


165
Canvas.SetLeft(theObject, 50)


+1, devo amare la sicurezza dei tipi. Sono curioso, però, perché SetLeft prende un UIElement invece di un DependencyObject
JaredPar

4
@ JaredPar: a prima vista direi che poiché SetLeft è specificamente un metodo di Canvas, capisce a quali tipi avrebbe senso dare una proprietà Left. Si ritiene che questo sia UIElement, questo forse aumenta il rilevamento di codice difettoso in cui viene passata accidentalmente la variabile sbagliata.
AnthonyWJones

msdn.microsoft.com/en-us/library/... Canvas.Left è una proprietà associata, che supporta un uso XAML. Quando si imposta questa proprietà nel codice, utilizzare invece SetLeft.
Yury Schkatula

50

Prova questo

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

Esiste un gruppo di metodi su DependencyObject (base della maggior parte delle classi WPF) che consentono l'accesso comune a tutte le proprietà di dipendenza. Loro sono

  • Valore impostato
  • GetValue
  • ClearValue

Modifica Aggiornato il set per utilizzare un doppio letterale poiché il tipo di destinazione è un doppio.


Grazie, per farlo funzionare ho dovuto eseguire il cast del numero intero: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay

No, per questo specificare la costante numerica in formato double: heObject.SetValue (Canvas.LeftProperty, 50.0);
Budda

12

Dato che stiamo cambiando la proprietà dell '' oggetto ', sarebbe meglio usare il metodo suggerito da JaredPar:

theObject.SetValue(Canvas.LeftProperty, 50d);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.