none
No me funciona el TextWrapping en Silverlight 5 RRS feed

  • Pregunta

  • No entiendo, debería ser directo, pero no me funciona el TextWrapping

    Tengo un grid en mi Page:

    <Grid x:Name="LayoutRoot" Background="DarkSeaGreen">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="100" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions> ....
    

    y en el row 3:

    <StackPanel Grid.Row="3" Grid.Column="1" Orientation="Vertical" Margin="10" >
         <TextBlock Text="{Binding SelectedItem.OrdenSalida, ElementName=inventarioComboBox}" 
                            TextWrapping="Wrap" Width="80"/>               
    </StackPanel>

    OrdenSalida es un campo de mi tabla de SQL que es Char(40), allí vienen enlistados los números de orden de salida que correspondan al registro, por ejemplo "1024, 2568, 4587"

    cuando ejecuto mi proyecto, el ejemplo que dí se trunca hasta el 4 del 4587:

    alguien tiene alguna idea de porqué me pasa esto? saludos y gracias


    cyndyrdz

    jueves, 25 de septiembre de 2014 21:47

Todas las respuestas

  • Hola,

    He tratado de reproducir el comportamiento haciendo lo mismo que tu y no logro reproducirlo, me parece que debes tener algún tipo de estilo en alguna otra fila o columa que esta afectando a tu Parent del textblock...

    Saludos,

    jueves, 25 de septiembre de 2014 22:08
  • Hola,

    He tratado de reproducir el comportamiento haciendo lo mismo que tu y no logro reproducirlo, me parece que debes tener algún tipo de estilo en alguna otra fila o columa que esta afectando a tu Parent del textblock...

    Saludos,


    jueves, 25 de septiembre de 2014 22:12
  • si Rodrigo, eso me temía, déjame lo reviso despacio, si no, pues lo vuelvo a empezar para ir viendo, porque esta parte fue la última que agregué, no tendrá algo qué ver que el campo esté bindeado?? porque si lo pruebo con un texto directo como:

     Text="1024, 2568, 4587"  TextWrapping="Wrap" 
    así si funciona, pero cuando lo relaciono con el campo de la bd no...

     ...saludos y muchas gracias


    cyndyrdz


    viernes, 26 de septiembre de 2014 13:29
  • si Rodrigo, eso me temía, déjame lo reviso despacio, si no, pues lo vuelvo a empezar para ir viendo, porque esta parte fue la última que agregué, no tendrá algo qué ver que el campo esté bindeado?? porque si lo pruebo con un texto directo como:

     Text="1024, 2568, 4587"  TextWrapping="Wrap" 
    así si funciona, pero cuando lo relaciono con el campo de la bd no...

     ...saludos y muchas gracias


    cyndyrdz



    El ejemplo que presento también utilizo el binding proveniente del combobox. Saludos.
    viernes, 26 de septiembre de 2014 15:50
  • Rodrigo, ya hice más pruebas y encontré que esta parte la tengo definida en una de las columnas de mi Grid Layout, y resulta que para otros registros con OrdenSalida más larga si se veían bien, pero para algunos no:

    en este ultimo ejemplo el tercer número está truncado pues no es un 4 sino un 4587 y no se ve.

    esa columna estaba definida así:

    <ColumnDefinition Width="100" />

    y la tuve qué poner así:

    <ColumnDefinition Width="130" />

    no entiendo porqué no se hace el ajuste automático...

    cyndyrdz

    viernes, 26 de septiembre de 2014 16:17
  • Con

    <ColumnDefinition Width="110" />

    mira lo que pasa:

    ¿?


    cyndyrdz

    viernes, 26 de septiembre de 2014 16:30
  • Hola,

    Con la información que tengo no lo puedo reproducir, debe existir otra cosa que este afectando al stackpanel de esa columna y fila. Ya que por el algorimo "in two pass" de wpf toma el ancho del padre del árbol... entonces me parece (por lo que se ve) que ese botón en la parte inferior esta afectando. El código que yo tengo es simple y sencillamente funciona.

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="100"/>
            </Grid.ColumnDefinitions>
    
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
    
            <ComboBox x:Name="cbNumbers" Margin="2">
                <ComboBoxItem Content="1234, 5678, 1234"/>
                <ComboBoxItem Content="0987, 5678, 8764"/>
                <ComboBoxItem Content="3452, 1256, 0912"/>
                <ComboBoxItem Content="1209, 8765, 3485"/>
            </ComboBox>
            
            <StackPanel Grid.Row="1" Grid.Column="1" Orientation="Vertical">
                <TextBlock Text="{Binding ElementName=cbNumbers, Path=SelectedItem.Content, UpdateSourceTrigger=PropertyChanged}"
                           VerticalAlignment="Center" TextWrapping="Wrap" Margin="4" Width="80" />
            </StackPanel>
        </Grid>
    </Window>

    Intenta cambiar el StackPanel por un Grid y ve que pasa... si tienes otro control contenido en el stack entonces éste puede estar afectando.

    Saludos,

    viernes, 26 de septiembre de 2014 16:44
  • Gracias Rodrigo, qué gorrito verdad? pero hice un ejemplo aparte súper sencillo y mira lo que pasa:

    El xaml:

    <navigation:Page 
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
               xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
               xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" 
               xmlns:Web="clr-namespace:MTTO.Web" x:Class="MTTO.PRUEBANavegacion"
               mc:Ignorable="d"
               d:DesignWidth="640" d:DesignHeight="480"
               Title="PRUEBANavegacion Page">
        <Grid x:Name="LayoutRoot">
    
            <riaControls:DomainDataSource x:Name="mtto_OrdenMttoDomainDataSource" AutoLoad="True" Height="0" 
                                          LoadedData="mtto_OrdenMttoDomainDataSource_LoadedData" QueryName="GetMtto_OrdenMttoQuery" 
                                          Width="0" d:DesignData="{d:DesignInstance Web:mtto_OrdenMtto, CreateList=true}">
                <riaControls:DomainDataSource.DomainContext>
                    <Web:DomainServiceMTTO/>
                </riaControls:DomainDataSource.DomainContext>
            </riaControls:DomainDataSource>
            <StackPanel Orientation="Horizontal">
                <ComboBox x:Name="mtto_OrdenMttoComboBox"  Height="23" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top"
                          DisplayMemberPath="ID" 
                          ItemsSource="{Binding Data, ElementName=mtto_OrdenMttoDomainDataSource}" 
                          SelectedValuePath="ID">
                    <ComboBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </ComboBox.ItemsPanel>
                </ComboBox>
                <TextBlock Text="{Binding SelectedItem.OrdenSalida, ElementName=mtto_OrdenMttoComboBox}"  TextWrapping="Wrap" 
                           VerticalAlignment="Top" Width="90" />
            </StackPanel>
    
        </Grid>
    </navigation:Page>
    

    Los datos de prueba en la BD de SQL:

    Los resultados al ejecutar la App y seleccionar cada uno de los registros:

    Como puedes ver en la 4ta y 6ta selección se corta la información y en los demás se ve bien...


    cyndyrdz

    viernes, 26 de septiembre de 2014 17:44
  • Hola, me temo que el problema que tienes es con el stackpanel, en el mismo tienes el combobox con el virtualizingstackpanel y el textblock, intenta separarlos y dejar el textblock en un grid. Si eso no funciona entonces tu control Ria hace algún extraño con la cadena de texto, puesto que al parecer es con algunos casos nadamás donde tienes el comportamiento errático.

    Saludos,

    viernes, 26 de septiembre de 2014 19:10
  • No pues esto sí que está raro, ya quité el StackPanel en el ejemplo sencillo que te envié y sigue truncando algunos registros, como si no calculara bien el espacio requerido para presentar el dato, se comporta muy raro, luego al Textblock le aumenté el Width, y sigue haciendo cosas raras, algunos registros se ven bien y otros no, se truncan, ¿?

    Rodrigo, muchas gracias por tomarte el tiempo para ayudarme, Saludos


    cyndyrdz

    viernes, 26 de septiembre de 2014 19:35
  • Hola Cynthia, probaste colocando el valor del width en Auto...

    <Grid x:Name="LayoutRoot" Background="DarkSeaGreen">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                 ....
    Saludos


    Christian Amado
    Software Engineer | MCPD: Windows Phone Developer | MCTS: Silverlight Developer
    Don't forget to mark the right answer and vote up if helps you.
    MCP Profile

    viernes, 26 de septiembre de 2014 19:36
  • Gracias Rodrigo, qué gorrito verdad? pero hice un ejemplo aparte súper sencillo y mira lo que pasa:

    El xaml:

    <navigation:Page 
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
               xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
               xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" 
               xmlns:Web="clr-namespace:MTTO.Web" x:Class="MTTO.PRUEBANavegacion"
               mc:Ignorable="d"
               d:DesignWidth="640" d:DesignHeight="480"
               Title="PRUEBANavegacion Page">
        <Grid x:Name="LayoutRoot">
    
            <riaControls:DomainDataSource x:Name="mtto_OrdenMttoDomainDataSource" AutoLoad="True" Height="0" 
                                          LoadedData="mtto_OrdenMttoDomainDataSource_LoadedData" QueryName="GetMtto_OrdenMttoQuery" 
                                          Width="0" d:DesignData="{d:DesignInstance Web:mtto_OrdenMtto, CreateList=true}">
                <riaControls:DomainDataSource.DomainContext>
                    <Web:DomainServiceMTTO/>
                </riaControls:DomainDataSource.DomainContext>
            </riaControls:DomainDataSource>
            <StackPanel Orientation="Horizontal">
                <ComboBox x:Name="mtto_OrdenMttoComboBox"  Height="23" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top"
                          DisplayMemberPath="ID" 
                          ItemsSource="{Binding Data, ElementName=mtto_OrdenMttoDomainDataSource}" 
                          SelectedValuePath="ID">
                    <ComboBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </ComboBox.ItemsPanel>
                </ComboBox>
                <TextBlock Text="{Binding SelectedItem.OrdenSalida, ElementName=mtto_OrdenMttoComboBox}"  TextWrapping="Wrap" 
                           VerticalAlignment="Top" Width="90" />
            </StackPanel>
    
        </Grid>
    </navigation:Page>

    Los datos de prueba en la BD de SQL:

    Los resultados al ejecutar la App y seleccionar cada uno de los registros:

    Como puedes ver en la 4ta y 6ta selección se corta la información y en los demás se ve bien...


    cyndyrdz

    Un último intento al estilo de fuerza bruta, creo que esto pude ser el problema, según leo las páginas de navegación de Silverlight tienen un ancho indefinido "Nan" y no se "acoplan" al ancho y largo de la página web, entonces a tu navigation page dale un Width específico digamos 800px y prueba de nuevo.

    Con esto se me acaban las ideas...

    Saludos,

    viernes, 26 de septiembre de 2014 20:13
  • OK, gracias, la verdad no creo porque en el ejemplo reducido que te mando, el Textblock no está ni cerca de llegar al límite horizontal de la pantalla, y solo puse el ComboBox y el Textblock, y el Textblock queda antes de la mitad de la pantalla...

    cyndyrdz

    viernes, 26 de septiembre de 2014 21:04