none
Cómo asignar un evento desde código a un textbox que se encuentra dentro de un datatemplate? RRS feed

  • Pregunta

  • Hola,

    Tengo una duda y es la siguiente, estoy haciendo una aplicación en la que cargo un datagrid dinámicamente. Para  cargar las columnas las cargo desde la función xamlreader.load.  Dentro de cada celda  cargo lo siguiente:

     

     

    <DataTemplate
    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >
    
    <StackPanel Orientation='Vertical'>
    <ItemsControl x:Name='Control' Language='es-ES' ItemsSource='{{Binding LasSecciones[{0}].{1}}}'> 
    
    <ItemsControl.ItemTemplate > 
    <DataTemplate>
    <Grid ShowGridLines='True' x:Name='Grid' Background='Transparent' >
    <TextBox Margin='5,5,5,5' BorderBrush='Transparent' Background='Transparent' 
     TextAlignment='Right' HorizontalAlignment='Right' 
    Text='{{Binding Cantidad, Mode=TwoWay, StringFormat={0:N}}}' >
    </TextBox>
    </Grid>
    </DataTemplate>
    </ItemsControl.ItemTemplate >
    
    </ItemsControl>
    </StackPanel>
    </DataTemplate>

     

     Los datos me los muestra  correctamente y sin problemas, pero al intentar asignarle un evento MouseLeftButtonDown  al textbox  desde el evento loadingrow  del datagrid  no reproduce el evento . La manera en la que le asigno el evento es así:

     

     

     

     For Each item In gDestajos.Columns
      If DirectCast(item.GetType, System.Type).Name = "DataGridTemplateColumn" Then
    
      Dim cellcontent As FrameworkElement = item.GetCellContent(e.Row)
      If DirectCast(cellcontent.GetType, System.Type).Name = "StackPanel" Then
       Dim sp As StackPanel = TryCast(cellcontent, StackPanel)
    
       For i = 0 To VisualTreeHelper.GetChildrenCount(sp) - 1
       Dim child As UIElement = CType(VisualTreeHelper.GetChild(sp, i), UIElement)
       If DirectCast(child.GetType, System.Type).Name = "ItemsControl" Then
        Dim ic As ItemsControl = DirectCast(child, ItemsControl)
        Dim gr As Grid = DirectCast(ic.ItemTemplate.LoadContent, Grid)
        Dim tb As TextBox = gr.Children(0)
    
        If tb IsNot Nothing Then   
        AddHandler tt.MouseLeftButtonDown, AddressOf ActualizarHora
        End If
       End If
       Next
       
      End If
      End If
     Next
    
    

     

     

    ¿Alguién sabe porque no me coge el evento?

     

    Gracias de antemano.

     


     

    <br/>
    

     

     

     

     



    lunes, 28 de marzo de 2011 15:40

Todas las respuestas

  • Hola, depronto no has intentado crear el evento igualmente en el xaml que cargas dinamicamente mediante XamlReader y en el code behind declaras un manejador así:

    XAML QUE SE VA A CARGAR.

    TextChanged="ReadWriteTB_TextChanged"

    CODE BEHIND

    Private Sub Text_TextChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
    //Pones un punto de ruptura a ver si te entra.

    MessageBox.Show("Ok!")

    End Sub

    Si nó, entonces mira este link

    Saludos!!!


    Custom Control Silverlight
    "Blog Ingphillip's Prog: TODO WEB
    martes, 29 de marzo de 2011 1:27
  • Hola,

    Si intento poner el evento en el xaml que cargo mediante xamlreader me da un fallo y por lo tanto no me carga la rejilla. Voy a mirar el enlace que me pones. Te añado la función que uso para cargar las celdas no sea que ponga mal el evento:

     

     

     

     Dim celltem As New System.Text.StringBuilder()
      celltem.Append("<DataTemplate ")
      celltem.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ")
      celltem.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' > ")  
      celltem.Append("<StackPanel Orientation='Vertical'>")
      celltem.Append(String.Format("<ItemsControl x:Name='Control' Language='es-ES' ItemsSource='{{Binding LasSecciones[{0}].{1}}}'> ", index, "Tareas"))
      celltem.Append("<ItemsControl.ItemTemplate > ")
      celltem.Append("<DataTemplate >")  
      celltem.Append("<Grid ShowGridLines='True' x:Name='Grid' Background='Transparent' >")
      
      
      celltem.Append(String.Format("<TextBox TextChanged='Text_TextChanged' x:Name='Tarea_{{Binding sNombreTarea}}' Margin='5,5,5,5' BorderBrush='Transparent' Background='Transparent' TextAlignment='Right' HorizontalAlignment='Right' Text='{{Binding Cantidad, Mode=TwoWay, StringFormat={0:N}}}' >", idseccion, "Tareas"))
      celltem.Append("</TextBox>")
      celltem.Append("</Grid>")
      celltem.Append("</DataTemplate>")
      celltem.Append("</ItemsControl.ItemTemplate > ")
      celltem.Append(" </ItemsControl> ")
      celltem.Append("</StackPanel>")
      celltem.Append("</DataTemplate>")
      Return celltem.ToString()
    

     

    Gracias!

     


    martes, 29 de marzo de 2011 8:19