none
Usar webbroswer para mostrar texto localizado RRS feed

  • Pregunta

  • Buenas, me he atascado en un punto que no logro salir,

    Debido a la limitación de los TextBlock, tengo que utilizar el control webbrowser para poder mostrar todo el texto, pero me ha surgido un inconveniente: Como puedo mostrar texto localizado en un HTML o XML local que se carga mediante webbrowser?

    Existe alguna manera posible? o debería de dividir el texto a mostrar en 2 textblock?.

    Un saludo y muchas gracias.


    Alejandro Green Humphreys Nebulaphone.com
    sábado, 21 de enero de 2012 15:45

Respuestas

  • Prueba esta:

     

    webBrowser1.NavigateToString(
    "<html><head><meta name='viewport' content='width=480, user-scalable=yes' /></head><body>" + CadenaLocalizada + "</body></html>"); 

    En este caso, CadenaLocalizada es una variable de tipo string, cargada con el texto. Partiendo de que tienes las cadenas en un archivo de recursos, y tienes copias para cada lenguaje, entonces la variable CadenaLocalizada esta definida asi:

    string CadenaLocalizada = Strings.textoLargo;

    Si tu archivo de recursos no se llama Strings, solo reemplkazalo, y reemplaza tambien el miembro textoLargo por como se llame tu contenedor.

    Si aun no te funciona, no te dire exactamente como es, pero te dire que la solucion a tu problema esta aca. Leelo completo y tendras tu solucion.

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Por otro lado, aun tengo una inquietud on eso de "Limitante de textBlock".... lee esto a ver si estoy en lo correcto en mi sospecha .

    Saludos

    martes, 24 de enero de 2012 4:43

Todas las respuestas

  • supongo que con "limitacion" te refieres a que va a solo una linea no?... si ese es el caso, te comento que no es ningun limitante, es solo el estado por defecto te la propiedad "TextWrapping". Solo tienes que establecerle esa propiedad a "Wrap" y listo, tu texto se mostrara en tantas lineas como necesites...

     Revisa por aca

    ojala te sirva de algo

    domingo, 22 de enero de 2012 18:13
  • Buenas, muchas gracias por tu respuesta, pero no me refería a eso. Me refiero al límite de carácteres que puede mostrar un Texblock, es por eso que debo recurrir al Webbrowser.

     

    Saludos y muchas gracias igualmente por tu ayuda (:


    Alejandro Green Humphreys Nebulaphone.com
    domingo, 22 de enero de 2012 18:17
  • aaaa... isto, pense que podria ser eso.

    Bueno, el control WebBorwser tiene un metodo NatigateToString(string html)

    El parametro es una cadena con formato html, osea el codigo de una pagina html. Puesdes usar ese metodo y pasarle por parametro algo como string html="<html><body>" + tuTextoLocalizado + "</body></html>".

    WebBrowser.NavigateToString()

    Referirse a cadenas localizadas en C#

    Creo que esta vez si te servira :)

    domingo, 22 de enero de 2012 18:36
  • Exacto esto busco, pero algo debo de estar haciendo mal, porque no me funciona el Binding, este es el código como lo uso:
    private
    void WebBrowser_OnLoaded(object sender, RoutedEventArgs e)
    {
    webBrowser1.NavigateToString(
    "<html><head><meta name='viewport' content='width=480, user-scalable=yes' /></head><body>{Binding ActualLanguage.Versailles_LyricsFaith, Source={StaticResource Language}}</body></html>"); 
    }
    me muestra la línea Binding, no la función que debería llamar, no se cual sería la manera correcta de realizarlo, muchas gracias por la ayuda :)

    Alejandro Green Humphreys Nebulaphone.com

    lunes, 23 de enero de 2012 23:58
  • Prueba esta:

     

    webBrowser1.NavigateToString(
    "<html><head><meta name='viewport' content='width=480, user-scalable=yes' /></head><body>" + CadenaLocalizada + "</body></html>"); 

    En este caso, CadenaLocalizada es una variable de tipo string, cargada con el texto. Partiendo de que tienes las cadenas en un archivo de recursos, y tienes copias para cada lenguaje, entonces la variable CadenaLocalizada esta definida asi:

    string CadenaLocalizada = Strings.textoLargo;

    Si tu archivo de recursos no se llama Strings, solo reemplkazalo, y reemplaza tambien el miembro textoLargo por como se llame tu contenedor.

    Si aun no te funciona, no te dire exactamente como es, pero te dire que la solucion a tu problema esta aca. Leelo completo y tendras tu solucion.

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Por otro lado, aun tengo una inquietud on eso de "Limitante de textBlock".... lee esto a ver si estoy en lo correcto en mi sospecha .

    Saludos

    martes, 24 de enero de 2012 4:43
  • Muchas gracias, me he decantado por la segunda opción que lo divide en los textblocks necesarios.

    Pero ahora me surge una duda, esa limitación de 2048x2048 pixels de un textblock es para no afectar el rendimiento del móvil?. Probaré una y otra a ver cual va mejor en rendimiento.

    Saludos y muchas gracias nuevamente. Todavía me falta mucho por aprender en cuanto a programación, y a ver si sigo aprendiendo mas a medida que mejoro la calidad de mis apps.  (:


    Alejandro Green Humphreys Nebulaphone.com
    martes, 24 de enero de 2012 9:57
  • Hola Alejandro ese problema al que te refieres con los textblock o textbox para mostrar bastante texto y que te lo divida en lineas no se soluciona con esos controles(ni poniendo un Scroll), ya que siguen los problemas cuando las lineas del texto son mas largas que la pantalla del dispositivo y necesitas hacer un scroll con tus dedos en la pantalla para seguir bajando y leer.

    La mejor y sencilla solución  es utilizar el control Listbox con una columna y establacer la propiedad TextWraping=Wrap asi:

     

                <ListBox x:Name="listBox" FontSize="30" SelectionChanged="listBox_SelectionChanged" Foreground="Black" Height="464" Width="447"  Margin="0" Padding="0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                           
                                <TextBlock Text="{Binding Content}" Width="450" TextWrapping="Wrap"/>
    
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
    

     

    El control funciona excelente. Lo que te puede pasar es que si quieres mostrar una cantidad "excesiva" de texto el control puede tardarse en cargarlo y tener problemas de rendimiento.

    La ventaja de utilizar el control WebBrowser es que puedes hacer zoom con tus dedos en multitoque al texto, algo que es muy apreciado cuando se esta leyendo.

    Saludos.

     


    Felipe Villa

    jueves, 2 de febrero de 2012 15:57