none
Pasar por referencia un control para usarlo en otra ventana RRS feed

  • Pregunta

  • Estimados,

    Estoy con un problema que no logro pasar, el tema es así:

    Tengo controles generados dinamicamente en la ventana principal (MainWindow) de esta manera:

    public void NewDocument(int intIdx)
            {
                Field newField = null;
                TextBox textBox = null;
    
                _dataContext.Document = new Document();
                _dataContext.Document.Idx = intIdx;
                _dataContext.Document.FieldList = new List<Field>();
    
                foreach (Field field in _documentType.FieldList)
                {
                    newField = new Field();
                    newField.Label = field.Label;
                    newField.Name = field.Name;
                    newField.Required = field.Required;
                    newField.TypeRange = field.TypeRange;
                    newField.Value = string.Empty;
                    newField.MultiLine = field.MultiLine;
    
                    _dataContext.Document.FieldList.Add(newField);
    
                    textBox = (TextBox)this.grdLeftPanel.FindName("txt" + field.Name);
    
                    if (newField.MultiLine == "True")
                    {
                        textBox.MouseDoubleClick += new MouseButtonEventHandler(this.txtAction_DoubleClick);
                        
                    }
    
                    if (textBox != null)
                    {
                        MainWindowUtils.SetBinding(_dataContext, textBox, newField);
    
                        textBox.IsReadOnly = !_documentType.IsEditable;
                    }
                }
            }

    Algunos TextBox les asigno un evento DoubleClic:

    protected void txtAction_DoubleClick(object sender, MouseButtonEventArgs e)
            {
                TextBox t = (TextBox)sender;
                
                var newWindow = new TextoAmpliado(ref t);
                newWindow.ShowDialog();
            }

    Lo que yo necesito es pasar como referencia el TextBox hacia otra ventana, convertir el mismo textbox a multilinea, cargarlo y al cerrar la nueva ventana y contenido pase a estar en el Texbox inicial...

    Espero que se entienda.

    Muchas gracias!!

    jueves, 25 de julio de 2013 19:11

Todas las respuestas

  • No logro entender muy bien lo que quieres hacer pero te sugiero que trabajes con el contenido del textbox mas no con el control tu puedes tener uno multilinea en tu pantalla y mantener el dinámico que ya tenias. Si no me equipoco el control de ese evento lo optiene de esta manera:

    TextBox t = e.OriginalSource as TextBox;

    Y por ultimo para que tengas mas control de codigo dinamico y de la movilidad puedes usar el patrón MVVM espero te sirvan las sugerencias y si puedes explicar un poco mas detallado lo que quieres lograr quizar pueda ser mas especifico en la respuesta.


    ing javier Leal

    jueves, 25 de julio de 2013 19:27
  • Hola Javier,

    Gracias por responder,

    El problema surgio debido a que a veces el usuario debe cargar mucho contenido en el TextBox, entonces habia pensado en que al hacerle doble clilc al texbox en cuestion te mande a otra ventana para realizar la carga en un textbox multilinea y al cerrar la ventana el textbox inicial quede con la informacion cargada.

    De todas formas voy a analizar lo que vos me indicas...

    jueves, 25 de julio de 2013 19:40
  • Ok amigo te entiendo pero hay una mejor forma de hacer eso si me lo permites puedes usar un Grip y usar el Auto para que cuando el texto sea grande la interfaz se va a adaptar a la cantidad de texto que tenga el textbox prueba y me avisas como te va aquí te dejo el ejemplo

        <Grid x:Name="LayoutRoot" >
            <Grid.RowDefinitions>
                <RowDefinition Height="20"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBox Grid.Row="1" Margin="5" TextWrapping="Wrap" ></TextBox>
            <Button Grid.Row="2" Width="100" Height="40" VerticalAlignment="Top" Content="Prueba"></Button>
        </Grid>


    ing javier Leal

    viernes, 26 de julio de 2013 0:20
  • Javier,

    Gracias nuevamente!

    El problema es que no podemos cambiar el tamaño de los TextBox en la ventana principal. Lo quieren en una ventana aparte...

    Me comentaron que viene por el lado del Binding del TextBox pero nose bien como...

    Saludos!!

    viernes, 26 de julio de 2013 15:37
  • Javier,

    Ya logre solucionarlo de la siguiente manera por si a alguien le sirve:

    En el evento DoubleClick hago lo siguiente:

    protected void txtAction_DoubleClick(object sender, MouseButtonEventArgs e)
            {
                
                TextBox lSnd = (TextBox)sender;
                string name = lSnd.Name.Remove(0, 3);
                BindingExpression bnde = lSnd.GetBindingExpression(TextBox.TextProperty);
                TextoAmpliado newWindow = new TextoAmpliado();
                Binding bnd = new Binding();
                bnd.Source = _dataContext;
                bnd.Path = new PropertyPath("Document[" + name + "]");
                bnd.Mode = BindingMode.TwoWay;
                newWindow.SetTextBinding(bnd);
                newWindow.ShowDialog();
                lSnd.SetBinding(TextBox.TextProperty, bnd);
    
            }

    Y luego en la nueva ventana tengo el siguiente método:

    public void SetTextBinding(Binding bnd)
            {
                textBox1.SetBinding(TextBox.TextProperty, bnd);
            }

    Eso me soluciona lo que estaba necesitando! Nose si es lo mejor pero salio funcionando... jaja

    Gracias y saludos!!

    viernes, 26 de julio de 2013 16:24