none
如何改变richtextbox里面元素的相对位置呢 RRS feed

  • 问题

  • 如上图所示,我在同一个block里面添加了一个图片和文字“我”,追加的文字似乎默认就是与图片的下边缘对齐

    能否改变“我”的位置,让它位于图片中间,或者顶部对齐呢 代码如下

                var a = new Image
                {
                    Source = new BitmapImage(new Uri("pack://application:,,,/"+"office.jpg", UriKind.RelativeOrAbsolute)),
                    Width = 30,
                    Height = 30,
                    Tag = "pack://application:,,,/" + "office.jpg"
                };
    
                string sourcePath = a.Source.ToString();
    
                var tmp = new Paragraph();
                tmp.Inlines.Add(a);
                tmp.Inlines.Add("我");
                MessageDocument.Blocks.Add(tmp);
    

    2016年4月12日 7:21

答案

  • 您好 wpf萌新,

    我建议您使用Table来进行布局。然后使用VerticalAlignment来对设置Text对其方式,我写了一段示例代码,供您参考。

    var a = new Image
    {
        Source = new BitmapImage(new Uri("pack://application:,,,/" + "office.jpg", UriKind.RelativeOrAbsolute)),
        Width = 30,
        Height = 30,
        Tag = "pack://application:,,,/" + "office.jpg"
    };
    
    string sourcePath = a.Source.ToString();
    
    Table t = new Table();
    t.Columns.Add(new TableColumn() { Width = new GridLength(30) });
    t.Columns.Add(new TableColumn() { });
    TableRowGroup tg = new TableRowGroup();
    TableRow tr = new TableRow();
    
    TableCell tc1 = new TableCell();
    tc1.Blocks.Add(new BlockUIContainer(a));
    tr.Cells.Add(tc1);
    
    TableCell tc2 = new TableCell();
    Grid g = new Grid();
    g.Height = 30;
    //如果想要靠上对其就把VerticalAlignment改为System.Windows.VerticalAlignment.Top
    g.Children.Add(new TextBlock() { Text = "我", VerticalAlignment = System.Windows.VerticalAlignment.Center});
    tc2.Blocks.Add(new BlockUIContainer(g));
    tr.Cells.Add(tc2);
    
    tg.Rows.Add(tr);
    t.RowGroups.Add(tg);
    
    richTextBox1.Document.Blocks.Add(t);
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 wpf萌新 2016年4月15日 6:14
    2016年4月14日 8:48

全部回复

  • 有人解答下吗,这个问题困扰了很久
    2016年4月12日 18:03
  • 流文档中的位置会以段块,行来区分。但是你要改变绝对位置,可以用 Floaters  https://msdn.microsoft.com/en-us/library/system.windows.documents.floater 或者 
    Figure https://msdn.microsoft.com/en-us/library/system.windows.documents.figure(v=vs.110).aspx

    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2016年4月13日 5:55
    版主
  • 谢谢,晚上试试
    2016年4月13日 9:00
  • 有没有具体的动态操作floater的例子呢,网上资料太少了,大多都是直接xaml布局的

    你也看出来了,我是在做聊天窗口的显示布局,类似qq好友聊天,需要动态显示人物头像,聊天内容,时间等

    2016年4月13日 13:41
  • 您好 wpf萌新,

    我建议您使用Table来进行布局。然后使用VerticalAlignment来对设置Text对其方式,我写了一段示例代码,供您参考。

    var a = new Image
    {
        Source = new BitmapImage(new Uri("pack://application:,,,/" + "office.jpg", UriKind.RelativeOrAbsolute)),
        Width = 30,
        Height = 30,
        Tag = "pack://application:,,,/" + "office.jpg"
    };
    
    string sourcePath = a.Source.ToString();
    
    Table t = new Table();
    t.Columns.Add(new TableColumn() { Width = new GridLength(30) });
    t.Columns.Add(new TableColumn() { });
    TableRowGroup tg = new TableRowGroup();
    TableRow tr = new TableRow();
    
    TableCell tc1 = new TableCell();
    tc1.Blocks.Add(new BlockUIContainer(a));
    tr.Cells.Add(tc1);
    
    TableCell tc2 = new TableCell();
    Grid g = new Grid();
    g.Height = 30;
    //如果想要靠上对其就把VerticalAlignment改为System.Windows.VerticalAlignment.Top
    g.Children.Add(new TextBlock() { Text = "我", VerticalAlignment = System.Windows.VerticalAlignment.Center});
    tc2.Blocks.Add(new BlockUIContainer(g));
    tr.Cells.Add(tc2);
    
    tg.Rows.Add(tr);
    t.RowGroups.Add(tg);
    
    richTextBox1.Document.Blocks.Add(t);
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 wpf萌新 2016年4月15日 6:14
    2016年4月14日 8:48
  • 谢谢啊,我立刻试试!
    2016年4月15日 5:25
  • 太感谢了,王,确实可以实现,而且可以嵌入各种UIElement
    2016年4月15日 6:15
  • 这样做确实可以,但最近是发现一个问题,输出到richtextbox的内容不能被动态的选中,并且不支持复制粘贴。

    只有run可以达到这种效果,但run本身不是uiElement,不能嵌套如grid进行排版,让我感到很困扰

    有什么好的办法吗,非常感谢



    2016年4月30日 3:10