2

WP7/8 の RichTextBox コントロールに画像を挿入したい。

XAMLで実行でき、正常に動作します。

<RichTextBox>                  
       <Paragraph> 
           <InlineUIContainer>
               <Image Source="/ApplicationIcon.png"/>
           </InlineUIContainer>
       </Paragraph>
  </RichTextBox>

私はコードC#でそれを行うことができます:

        Image MyImage = new Image();
        MyImage.Source = new BitmapImage(new Uri("/ApplicationIcon.png", UriKind.RelativeOrAbsolute));
        MyImage.Height = 50;
        MyImage.Width = 50;
        InlineUIContainer MyUI = new InlineUIContainer();
        MyUI.Child = MyImage;

        Paragraph myParagraph = new Paragraph();
        myRichTextBox.Blocks.Add(myParagraph);

        myParagraph.Inlines.Add(MyUI);

しかし、私はこのようにすることはできません。

        string xaml =
                @"<Section xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                    <Paragraph>                   
                        <InlineUIContainer>
                             <Image Source=""/ApplicationIcon.png""/>
                        </InlineUIContainer>
                    </Paragraph>                                 
                </Section>";
        myRichTextBox.Xaml = xaml;

エラーがあります。

私はそれについてここで読んだ:

これは、XAML パーサーが Paragraph、Underline などの要素を解決する方法を認識していないために発生しています。これを修正するには、要素を解決できるように、実際のコンテンツを含む段落を名前空間を定義する Section 要素でラップする必要があります。

しかし<Section xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">、助けないでください。

これは私の気まぐれではありません。この方法でコンテンツを作成するのは本当に簡単です。(StringFormat、Replace などを使用します)。

問題は何でしょうか?

前もって感謝します!

アップデート

この記事から:

public MainPage()
{
    InitializeComponent();
    ListBox list = new ListBox();
    list.ItemTemplate = this.CreateDataTemplate(); 
    list.ItemsSource = new List<string>{"first","second","third","forth"};
    ContentPanel.Children.Add(list);
}

private DataTemplate CreateDataTemplate()
{
      string xaml = @"<DataTemplate
                            xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                            xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
                            <Grid>            
                                <RichTextBox IsReadOnly=""True"">
                                    <Paragraph>                                      
                                        <InlineUIContainer> 
                                                <Image  Source=""http://i.stack.imgur.com/m0UAA.jpg?s=32&g=1"" /> 
                                        </InlineUIContainer>
                                    </Paragraph>
                                </RichTextBox>            
                            </Grid>        
                            </DataTemplate>";
       DataTemplate dt = (DataTemplate)XamlReader.Load(xaml);  
       return dt;
   }

行の例外 "System.Windows.Markup.XamlParseException":

 DataTemplate dt = (DataTemplate)XamlReader.Load(xaml);  
4

1 に答える 1

3

RichTextBox の Xaml プロパティを使用して画像を割り当てることはできません。Xaml プロパティに含めることができる要素については、以下のリンクを参照してください。

http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.xaml(v=vs.95).aspx

リストを使用して動的に設計する場合は、以下のリンクに示すように、動的に DataTemplate を作成できます。

http://www.geekchamp.com/tips/wp7-dynamically-generating-datatemplate-in-code

テンプレートは次のようになります。

      @"<DataTemplate
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
    <Grid>            
        <RichTextBox><Paragraph><InlineUIContainer> <Image Height='50' Width='50' Source='/RichTextBoxBinding;component/Desert.jpg' /> </InlineUIContainer></Paragraph></RichTextBox>            
    </Grid>        
    </DataTemplate>";
于 2013-09-27T04:48:21.940 に答える