在C# WPF中使文本环绕图像或链接两个TextBlock

k4ymrczo  于 2023-01-27  发布在  C#
关注(0)|答案(2)|浏览(217)

我正在创建一个程序,在同一个窗口中显示文本和图像。图像在屏幕的左上角,文本从图像的右边开始,然后在图像的下面继续显示。
目前,我正在尝试使用两个文本块(一个在图像的右边,一个在图像和第一个文本块的下面),并希望文本从一个块延续到另一个块。这是一个理想的方法吗?如果是的话,我该怎么做?有没有比这更好/更简单的方法,或者我可以只用一个对象来做?谢谢,
安德鲁

fkaflof6

fkaflof61#

我不建议使用TextBlocks来实现这种布局。正如Kieren所建议的,FlowDocument将是这种设计的理想选择。看看这个XAML代码片段,以及使用FlowDocument、Paragraph元素和包含图像的Floater元素所生成的WPF应用程序屏幕截图:

<Grid>
    <FlowDocumentScrollViewer>
        <FlowDocument>                
            <Paragraph>
                <Floater Width="130" HorizontalAlignment="Left" Margin="0,0,5,5" Padding="3">
                    <BlockUIContainer>
                        <Image Source="/FlowDocumentTest;component/dog.png" Width="100" /> 
                    </BlockUIContainer>
                </Floater>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                Suspendisse et diam felis. Vestibulum ac nisl mi. 
                Etiam varius velit lobortis nibh vestibulum nec consequat velit pellentesque. 
                Cras commodo libero placerat nulla dapibus eget porttitor ligula tempor. 
                Donec nisl massa, congue et pretium sit amet, feugiat vel est. 
                Nulla dapibus metus in justo pulvinar sit amet viverra lorem rhoncus. 
                Integer placerat interdum massa et mattis.</Paragraph>
        </FlowDocument>
    </FlowDocumentScrollViewer>
</Grid>

xdyibdwo

xdyibdwo2#

在代码隐藏中尝试以下操作:

FlowDocument fd = new FlowDocument();

            Paragraph p = new Paragraph();
            System.Windows.Controls.Image image = new System.Windows.Controls.Image();
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.UriSource = GetUri("Images/ScanHead.png", typeof(PrintService));
            bi.EndInit();
            image.Stretch = Stretch.None;
            image.Source = bi;

            InlineUIContainer b = new InlineUIContainer(image);
            b.BaselineAlignment = BaselineAlignment.Center;
            p.Inlines.Add(b);
            InlineUIContainer b2 = new InlineUIContainer(new TextBlock() { Text="Text\r\n2nd row"});
            p.Inlines.Add(b2);

            p.FontStyle = FontStyles.Normal;
            p.FontFamily = new FontFamily("Arial");
            p.FontSize = 18;
            fd.Blocks.Add(p);

相关问题