WPF往RichTextBox新增圖片及調整行距

weixin_30924079發表於2020-04-04

 

WPF裡面雖然很多形式上跟Winform一樣,但是控制元件的使用上面還是會有很多詫異。RichTextBox就是一個例子,是的,在WPF裡面對這個控制元件可以做很多Winform很難做的效果出來。

比如在對RichTextBox插入圖片,winform時代除了用複製貼上這種藉助剪貼簿的差勁方法之外就是要重寫和自定義RichTextBox控制元件了。這就需要高超的程式設計能力了。但在WPF裡面,只需要加幾個程式碼就能搞定了。

在XAML裡面新增圖片到RichTextBox可以如下所示:

        <RichTextBox HorizontalAlignment="Left" Margin="90,12,0,0" Name="richTextBox1">

            <RichTextBox.Document>

                <FlowDocument Focusable="True" LineHeight="5">

                    <Paragraph x:Name="gara">                      

                        文字區域

                        <Image Source="D:\1342892_10.jpg" Focusable="True" Height="50" Stretch="Uniform" />                       

                        文字區域                       

                        <Run Text="文字區域文字區域"></Run>

                        <Run Text="文字區域"></Run>

                    </Paragraph>

                    <Paragraph x:Name="gara1">                      

                        <Run Text="文字區域"></Run>

                        <Run Text="文字區域"></Run>

                    </Paragraph>                   

                </FlowDocument>

            </RichTextBox.Document>

        </RichTextBox>

 

這樣就往控制元件裡面新增了圖片了。

備註:FlowDocument裡面的LineHeight屬性是文欄位落的間距。預設間距很大,所以這裡調整一下!

 

當然,這樣未必能夠完全滿足要求,因為有時候我們需要在程式執行的時候點選按鈕選取圖片進行新增。程式碼如下:

private void AddJPG_Click(object sender, RoutedEventArgs e)

        {

            string filepath = "";

            string filename = "";

            OpenFileDialog openfilejpg = new OpenFileDialog();

            openfilejpg.Filter = "jpg圖片(*.jpg)|*.jpg|gif圖片(*.gif)|*.gif";

            openfilejpg.FilterIndex = 0;

            openfilejpg.RestoreDirectory = true;

            openfilejpg.Multiselect = false;

            if (openfilejpg.ShowDialog() == true)

            {

                filepath = openfilejpg.FileName;

                Image img = new Image();

                BitmapImage bImg = new BitmapImage();               

                img.IsEnabled = true;               

                bImg.BeginInit();

                bImg.UriSource = new Uri(filepath, UriKind.Relative);

                bImg.EndInit();

                img.Source = bImg; 

                //MessageBox.Show(bImg.Width.ToString() + "," + bImg.Height.ToString());

                /* 調整圖片大小

                if (bImg.Height > 100 || bImg.Width > 100)

                {

                    img.Height = bImg.Height * 0.2;

                    img.Width = bImg.Width * 0.2;

                }*/

                img.Stretch = Stretch.Uniform;  //圖片縮放模式

                new InlineUIContainer(img, richTextBox1.Selection.Start); //插入圖片到選定位置

            }

        }

這樣就插入了一張圖片到RichTextBox裡了,是不是很簡單呢!

 

注:文字系原創,如要轉載請務必註明作者(夢心)及出處(部落格地址:http://www.cnblogs.com/mengxin523/),謝謝!

 

轉載於:https://www.cnblogs.com/saper/archive/2010/04/07/1706782.html

相關文章