2009-02-12 12 views
88

que tienen un rectángulo en mi XAML y quieren cambiar su propiedad Canvas.Left en código detrás:¿Cómo puedo acceder a una propiedad adjunta en el código?

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

Pero esto no funciona:

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

¿Alguien sabe lo que la sintaxis es hacer ¿esta?

Respuesta

146
Canvas.SetLeft(theObject, 50) 

+0

+1, tengo que amar la seguridad del tipo. Sin embargo, tengo curiosidad por saber por qué SetLeft toma un UIElement en lugar de un DependencyObject – JaredPar

+3

@JaredPar: supongo que, dado que SetLeft es específicamente un método de Canvas, entiende qué tipos tendría sentido asignarle una propiedad Left. Considera que esto es UIElement, esto tal vez aumente la detección de código defectuoso donde accidentalmente se le pasa la variable incorrecta. – AnthonyWJones

+0

https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.canvas.left.aspx Canvas.Left es una propiedad adjunta, que admite el uso de XAML. Al establecer esta propiedad en código, use SetLeft en su lugar. –

46

probar este

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

Hay un grupo de métodos de DependencyObject (base de la mayoría de las clases de WPF) que permiten el acceso común a todas las propiedades de dependencia. Son

  • FijarValor
  • GetValue
  • ClearValue

Editar Actualizado el conjunto de utilizar un doble literal ya que el tipo de destino es un doble.

+0

Gracias, para conseguir que esto funcione tuve que arrojar el número entero: theObject.SetValue (Canvas.LeftProperty, (doble) 50); –

+0

No, para esto especifique la constante numérica en formato doble: heObject.SetValue (Canvas.LeftProperty, 50.0); – Budda

12

Como estamos cambiando la propiedad del 'objeto', sería mejor utilizar el método suggedte por JaredPar:

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