0

MainUI にリストボックスがあります。以下のコードでアイテムを追加します。

for (int i = 0; i < 50; i++) {
    ListBoxItem sub1 = new ListBoxItem();
    if (i % 2 == 0) {
       sub1.Foreground = Brushes.Red;
    } else {
       sub1.Foreground = Brushes.Green;
    }

    sub1.Content = i;
    this.listStatus.Items.Add(sub1);
}

その後、その値を赤と緑の色でファイルに保存したいと思います。それらを.docファイルに書き込もうとしましたが、以下のコードでは黒い文字しか取得できません:

int lisboxcounter = 0;

FileStream fs = new FileStream(@"D:\Test.doc", FileMode.OpenOrCreate);

StreamWriter s = new StreamWriter(fs);
while (this.listStatus.Items.Count > lisboxcounter) {
   s.WriteLine(this.listStatus.Items[lisboxcounter].ToString());
   lisboxcounter++;
}

s.Close();
fs.Close();

値はSystem.Windows.Controls.ListBoxItem:0 です。

値のみを書き込むにはどうすればよいですか ; 0,1,2,3 ...赤と緑の色?

どうもありがとう。

4

1 に答える 1

1

最善の策は、RichTextBox に書き込み、その内容を RTF ファイルに保存することです。

XAML

    <StackPanel Orientation="Horizontal"
                Grid.Row="0">
        <Button Width="80"
                Content="Load"
                Name="_loadButton"
                Click="_loadButton_Click" />
        <Button Width="80"
                Content="Save"
                Name="_saveButton"
                Click="_saveButton_Click" />
    </StackPanel>

    <RichTextBox Grid.Row="1" Name="_rtfBox" VerticalScrollBarVisibility="Auto" />
</Grid>

分離コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Diagnostics;

namespace SaveAsRtf
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void _loadButton_Click(object sender, RoutedEventArgs e)
        {
            var newDoc = new FlowDocument();
            for (int i = 0; i < 50; i++)
            {
                Paragraph newPara = new Paragraph();
                if (i % 2 == 0)
                {
                    newPara.Foreground = Brushes.Red;
                }
                else
                {
                    newPara.Foreground = Brushes.Green;
                }

                newPara.Inlines.Add(new Run(i.ToString()));
                newDoc.Blocks.Add(newPara);
            }
            _rtfBox.Document = newDoc;
        }

        private void _saveButton_Click(object sender, RoutedEventArgs e)
        {
            string temp = System.IO.Path.GetTempFileName() + ".rtf";
            using (FileStream fs = File.Create(temp))
            {
                TextRange text = new TextRange(_rtfBox.Document.ContentStart, _rtfBox.Document.ContentEnd);
                text.Save(fs, DataFormats.Rtf);
            }

            Process.Start(temp);
        }
    }
}
于 2012-06-28T09:11:22.230 に答える