【问题标题】:Rich TextBlock in ListViewItem Text WrappingListViewItem 文本环绕中的富 TextBlock
【发布时间】:2017-03-01 03:35:13
【问题描述】:

我在 ListView 的 ListViewItem 中有一个 RichTextBlock。我一生都无法找出为什么 RichTextBlock 上的文本换行不适用。 XAML:

<ScrollViewer x:Name="MessagesScroller" HorizontalScrollMode="Disabled">
            <ListView x:Name="Messages" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/>
        </ScrollViewer>

C#

ListViewItem listviewitem = new ListViewItem();
                    listviewitem.HorizontalContentAlignment = HorizontalAlignment.Stretch;
                    listviewitem.VerticalAlignment = VerticalAlignment.Stretch;
                    listviewitem.Tag = message.Id;
                    StackPanel stack = new StackPanel();
                    stack.Orientation = Orientation.Horizontal;
                    stack.VerticalAlignment = VerticalAlignment.Stretch;
                    Image Avatar = new Image();
                    Avatar.Height = 50;
                    Avatar.VerticalAlignment = VerticalAlignment.Top;
                    Avatar.Source = new BitmapImage(new Uri("https://cdn.discordapp.com/avatars/" + message.User.Id + "/" + message.User.Avatar + ".jpg"));
                    stack.Children.Add(Avatar);
                    StackPanel innerstack = new StackPanel();
                    innerstack.VerticalAlignment = VerticalAlignment.Stretch;
                    StackPanel MsgData = new StackPanel();
                    MsgData.Orientation = Orientation.Horizontal;
                    #region RichTextBlock
                    RichTextBlock user = new RichTextBlock();
                    user.TextWrapping = TextWrapping.WrapWholeWords;
                    Paragraph userPara = new Paragraph();
                    Run run1 = new Run();
                    run1.Text = message.User.Username;
                    userPara.Inlines.Add(run1);
                    user.Blocks.Add(userPara);
                    #endregion

                    MsgData.Children.Add(user);

                    #region RichTextBlock
                    RichTextBlock timestamp = new RichTextBlock();
                    Paragraph timePara = new Paragraph();
                    Run run2 = new Run();
                    run2.Text = message.Timestamp.Month.ToString() + "/" + message.Timestamp.Day + " at " + message.Timestamp.Hour.ToString() + ":";
                    if (message.Timestamp.Minute < 9)
                    {
                        run2.Text += "0";
                    }
                    run2.Text += message.Timestamp.Minute.ToString();
                    timestamp.Foreground = GetSolidColorBrush("#FF333333");
                    timePara.Inlines.Add(run2);
                    timestamp.Blocks.Add(timePara);
                    timestamp.Margin = new Thickness(5, 0, 0, 0);
                    #endregion

                    MsgData.Children.Add(timestamp);
                    innerstack.Children.Add(MsgData);

                    #region RichTextBlock
                    RichTextBlock txtblock = new RichTextBlock();
                    txtblock.TextWrapping = TextWrapping.WrapWholeWords;
                    Paragraph txtPara = new Paragraph();
                    Run run3 = new Run();
                    run3.Text = message.Content;
                    txtPara.Inlines.Add(run3);

                    txtblock.Blocks.Add(txtPara);

                    foreach (SharedModels.Embed embed in message.Embeds)
                    {
                        Paragraph paragraph = new Paragraph();
                        if (embed.title != null)
                        {
                            Run title = new Run();
                            title.Text = embed.title + "\n";
                            paragraph.Inlines.Add(title);
                        }
                        if (embed.Description != null)
                        {
                            Run desc = new Run();
                            desc.Text = embed.Description + "\n";
                            paragraph.Inlines.Add(desc);
                        }
                        if (embed.Thumbnail.Url != null)
                        {
                            InlineUIContainer container = new InlineUIContainer();
                            BitmapImage bi = new BitmapImage(new Uri(embed.Thumbnail.ProxyUrl));
                            Image image = new Image();
                            image.Height = 300;
                            image.Source = bi;
                            container.Child = image;
                            paragraph.Inlines.Add(container);
                        }
                        txtblock.Blocks.Add(paragraph);
                    }

                    foreach (SharedModels.Attachment attach in message.Attachments)
                    {
                        Paragraph paragraph = new Paragraph();
                        Run run = new Run();
                        run.Text = attach.Filename;
                        BitmapImage bi = new BitmapImage(new Uri(attach.Url));
                        Image image = new Image();
                        image.Height = 300;
                        image.Source = bi;
                        InlineUIContainer container = new InlineUIContainer();
                        container.Child = image;
                        paragraph.Inlines.Add(run);
                        paragraph.Inlines.Add(container);
                        txtblock.Blocks.Add(paragraph);
                    }
                    #endregion

                    innerstack.Children.Add(txtblock);
                    stack.Children.Add(innerstack);
                    listviewitem.Content = stack;

                    #region Flyout
                    Flyout flyout = new Flyout();
                    StackPanel flyoutcontent = new StackPanel();
                    flyoutcontent.Margin = new Thickness(-10);
                    /*Button AddRection = new Button()
                    {
                        Content = "Add Reaction",
                        HorizontalAlignment = HorizontalAlignment.Stretch
                    };
                    flyoutcontent.Children.Add(AddRection);
                    Button Pin = new Button()
                    {
                        Content = "Pin",
                        HorizontalAlignment = HorizontalAlignment.Stretch
                    };
                    flyoutcontent.Children.Add(Pin);*/
                    /*Button Edit = new Button()
                    {
                        Content = "Edit",
                        HorizontalAlignment = HorizontalAlignment.Stretch,
                        Tag = message.Id
                    };
                    Edit.Click += EditMessage;
                    flyoutcontent.Children.Add(Edit);*/
                    Button Delete = new Button()
                    {
                        Content = "Delete",
                        HorizontalAlignment = HorizontalAlignment.Stretch,
                        Tag = message.Id
                    };
                    Delete.Click += DeleteThisMessage;
                    flyoutcontent.Children.Add(Delete);
                    flyout.Content = flyoutcontent;
                    listviewitem.ContextFlyout = flyout;
                    listviewitem.RightTapped += OpenRightTapFlyout;
                    listviewitem.Holding += OpenHoldingFlyout;
                    #endregion

                    Messages.Items.Add(listviewitem);

我已将整个程序连根拔起,改为使用 StackPanels,但这并没有帮助

【问题讨论】:

    标签: xaml uwp word-wrap


    【解决方案1】:

    您为布局使用了StackPanel,并将StackPanelOrientation 属性设置为HorizontalStackPanel 是其子级的大小。所以看起来原因是您没有为RichTextBlock 设置Width 属性。 widthRichTextBlock 大小与其内容 StackPanelsize toRichTextBlock`,它可能不会换行。

    您可能有几种方法可以解决此问题:

    • RichTextBlock 设置width 属性。

      RichTextBlock txtblock = new RichTextBlock();
      txtblock.Width = 300;
      txtblock.TextWrapping = TextWrapping.WrapWholeWords;
      
    • 如果您不需要这样的布局,请删除 StackPanelorientation 属性。

       //stack.Orientation = Orientation.Horizontal;
      
    • 或者您可以改用Grid。网格可以更好地帮助您定义布局。你可以定义图片和RichTextBlock布局如下。

      <Grid>
          <Grid.RowDefinitions>
              <RowDefinition Height="Auto"/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
              <ColumnDefinition></ColumnDefinition>
              <ColumnDefinition></ColumnDefinition>
          </Grid.ColumnDefinitions>
          <Image Source="Assets/caffe1.jpg" Height="100" Grid.Row="0" Grid.Column="0"></Image>
          <RichTextBlock TextWrapping="WrapWholeWords" Grid.Row="0" Grid.Column="1">
              <Paragraph>
                  <Run FontStyle="Italic">sample text todemonstrate some properties.demonstrate some properties.demonstrate some properties.demonstrate some properties.
                              demonstrate some properties.demonstrate some properties.demonstrate some properties.demonstrate some properties.demonstrate some properties.
                  </Run> 
              </Paragraph>
          </RichTextBlock>
      </Grid>
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      相关资源
      最近更新 更多