2012-08-06 14 views
5

Estoy construyendo una aplicación de lector de RSS simple para Windows 8 en C# y XMAL.Windows 8 Metro RichTextColumns insertar hipervínculos e imágenes

El feed devuelve contenido html para el cuerpo del artículo.

Creo un ItemDetailPage y en él, utiliza columnas RichTextBlock para mostrar columnas de texto, que se ven geniales.

Así que ato una propiedad de contenido al bloque de texto enriquecido que utiliza HtmlUtilities.ConvertToText para analizar el texto del contenido html.

Esto funciona bien. Sin embargo, todavía quiero tener hipervínculos e imágenes en el contenido. Originalmente estaba usando un WebView y NavigateToString; sin embargo, no puede usar columnas, así que obtenga una página larga de texto, que no quiero.

¿Hay alguna manera de hacerlo? Puedo analizar las imágenes y los hipervínculos usando el puerto de metro del paquete de agilidad Html , pero ¿hay alguna forma de insertar estos hipervínculos e imágenes? Para las imágenes, estaba pensando en agregar a la clase richtextcolumns, por lo que al crear una nueva columna, antes de agregar eso, agregó una imagen. Esto puede funcionar, pero sería terrible con una imagen al comienzo de cada columna.

¿Alguien tiene alguna idea de cómo se puede lograr esto? Sería similar al diseño de la aplicación de noticias contoso que tienen hasta http://msdn.microsoft.com/en-us/library/windows/apps/hh868272.aspx. Si se desplaza a la página del artículo, tiene una cita en bloque en el contenido del artículo.

Respuesta

4

El RichTextBlock contiene una colección de párrafos y un párrafo es una lista de inline. Las líneas en línea suelen ser Runs, pero también puede usar InlineUIContainer como en línea. InlineUIContainer tiene un elemento secundario que puede utilizar cualquier elemento XAML que desee, hipervínculo o una imagen.

Yo personalmente uso esta función para convertir un hipervínculo de html en una línea:

public void AddLink(XElement element) 
    { 
     var link = element.Attribute("href").Value; 

     InlineUIContainer uc = new InlineUIContainer(); 
     TextBlock tb = new TextBlock(); 
     tb.Margin = new Thickness(0, 0, 0, 0); 
     var run = new Run(); 
     run.Text = element.Value; 
     tb.Inlines.Add(run); 
     tb.Tapped += (s, e) => 
     { 
      Launcher.LaunchUriAsync(new Uri(link, UriKind.Absolute)); 
     }; 
     uc.Child = tb; 
     paragraph.Inlines.Add(uc); 
    } 

se puede hacer una similar piensan con una imagen

+0

¿Dónde utilizar esta función? Como parte del análisis con Html Agility Pack, ¿menciones en la publicación original? – SimpsOff

Cuestiones relacionadas