2010-12-16 7 views
1

Ich weiß aus der MSDN-Dokumentation, dass Sie ein Bild, das Teil einer RichTextBox ist, nicht mit der XAML-Eigenschaft exportieren können. Das ist in Ordnung, ich kann das umgehen, indem ich die Blöcke manuell durchsuche und durchschaue.Laden eines Bildes in silverlight richttextbereich mit xaml

Meine Frage ist, wenn ich das XAML manuell neu erstellen, um ein Bild aufzunehmen, wäre die RichTextBox in der Lage, es von Xaml zu laden.

Ich habe die Reflexion und manuelle XAML-Export bereits implementiert und es funktioniert perfekt ohne Bilder.

Mit Bildern erzeugt es das:

<Section xml:space="preserve" HasTrailingParagraphBreakOnPaste="False" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
<Paragraph TextAlignment="Left" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000" > 
<Run Text="Test" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000" /> 
</Paragraph> 
<Paragraph TextAlignment="Left" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000" > 
<InlineUIContainer> 
<Image Source="./desert.jpg" Height="150" Width="200" /> 
</InlineUIContainer> 
<Run Text="" FontSize="20" FontFamily="Portable User Interface" FontWeight="Normal" FontStyle="Normal" FontStretch="Normal" Foreground="#FF000000" /> 
</Paragraph> 
</Section> 

Was ich über die XAML-Eigenschaft in die RTB zu und Pausen! (Die Ausnahme ist nutzlos, nur ein IllegalArgmentException sagen ‚Value‘.

Wenn Sie seine feinen nur den InlineUIContainer Abschnitt nehmen!

ich nicht herausfinden kann, wenn sein möglicherweise ein Problem mit der Bildstelle falsch sein oder die RichTextBox nur keine Bilder außer in-Code zu akzeptieren

der einzige Grund, warum ich denke, dass es möglicherweise ein Bild angeben, von xAML ist, weil die MSDN Dokumente zeigt es:..? http://msdn.microsoft.com/en-us/library/ee681613(VS.95).aspx

Irgendwelche Ideen

Ta,

Andy.

+0

hilft, wenn ich Zeit habe, ich glaube, ich könnte die Symbole für Silverlight und Debug in den Code bekommen, nicht einfach wollen so viel Zeit damit verbringen, auf sie! :( – Andy

Antwort

2

Die Xaml Eigenschaft auf der RichTextBox unterstützt InlineUIContainer entweder nicht oder nicht.

Eine Arbeit um würde ich versuchen, erste ist den XamlReader auf Ihrem XAML zu verwenden, anstatt fügen Sie dann das Ergebnis an die RichTextBox.Blocks Sammlung: -

Section section = (Section)XamlReader.Load(yourXaml); 
yourRTB.Blocks.Add(section); 
+0

Dies wird auch nicht funktionieren, weil XamlReader wird der gleiche Fehler. –

+0

Wow, snap! :) Ihre Antwort nicht gesehen, wenn ich gepostet! @Akash Xaml Leser arbeitet dankbar! :) – Andy

+0

Danke. Sehr schön. –

0

Nun habe ich einen Weg gefunden, es zu tun, alle -be-es lädt das XAML nicht direkt in das RTB, das die XAML-Eigenschaft verwendet.

XAML laden mit Bildern in die RTB ich je hatte, um das Laden der XAML in Objekte zurückzukehren zuerst das XamlReader Objekt verwenden, dann das Hinzufügen der Blöcke eins nach dem anderen, wie pro diesem Code:

 // Load up the XAML using the XamlReader 
     Object o = XamlReader.Load(xamlTb.Text); 
     if (o is Section) 
     { 
      // Make sure its a section and clear out the old stuff in the rtb 
      Section s = o as Section; 
      rtb.Blocks.Clear(); 

      // Remove the blocks from the section first as adding them straight away 
      // to the rtb will throw an exception because they are a child of two controls. 
      List<Block> tempBlocks = new List<Block>(); 
      foreach (Block block in s.Blocks) 
      { 
       tempBlocks.Add(block); 
      } 
      s.Blocks.Clear(); 

      // Add them block by block to the RTB 
      foreach (Block block in tempBlocks) 
      { 
       rtb.Blocks.Add(block); 
      } 
     } 

Nicht so gut wie ich hätte helfen können, aber ich denke, die XAML-Eigenschaft analysiert InlineUIElements nicht.

Andy.

0

In XAML ./desert.jpg Quelle wird nicht funktionieren. Verwenden Sie stattdessen dieses

<Image Source="YourNameSpaceBus;component/images/desert.jpg" 
Height="150" Width="200" /> 

Hier sind zwei wichtige Stichworte erste Ihren Namensraum ProjectBus

Die secondone fixiert ist „Komponente

dann imagepath Sie schreiben müssen, ist. Ansonsten, auch wenn es auf Designtime anzeigbar ist manchmal nicht zur Laufzeit.

wie

<Image Source="AHBSBus;component/images/mail.png" Stretch="None" Height="23"> 
</Image> 

Hoffnung

Verwandte Themen