简体   繁体   English

我应该为所需的输出格式使用哪个WPF控件?

[英]Which WPF control should I use for this desired output format?

I have some data I need to present to a user in a very specific format and I want something that looks like this: 我有一些数据需要以非常特定的格式呈现给用户,并且我想要类似以下内容:

+- Window 1 --------------------------+ +- Window 2 ----------+
| This is some text that is being     | | Yet more stuff      |
| output for the user.                | |                     |
|                                     | |                     |
+-------------------------------------+ +---------------------+
+- Window 3 ----------------+ +- Window 4 --------------------+
| Yoiks!                    | | Blah blah blah                |
| To eternity and beyond... | |                               |
|                           | |                               |
+---------------------------+ +-------------------------------+

There will be a number of these items, all with different headings and they will be of fixed sizes (each section will be a different size but the sizes of each section are fixed). 这些项目会有很多,所有的标题都不同,并且大小固定(每个部分的大小都不同,但是每个部分的大小都是固定的)。 The text within the sections will be fixed fonts (like Courier), not proportional. 这些部分中的文本将是固定字体(例如Courier),而不是成比例的字体。

I already have the WPF StackPanels set up to properly arrange these controls the way I want them. 我已经设置了WPF StackPanels来按照我想要的方式正确安排这些控件。 All I need to know is what's the best control to use for the actual content (a nice frame and heading, with fixed-size text within). 我需要知道的是对实际内容使用的最佳控件是什么(一个不错的框架和标题,其中包含固定大小的文本)。

One other thing, I need to be able to underline one or more of the characters inside the control. 另一件事,我需要能够在控件内的一个或多个字符下划线。 In my Java version, I was able to use HTML to do this. 在我的Java版本中,我能够使用HTML来做到这一点。 It'd also be nice if the text was able to have other properties (like foreground and background color) but it's not absolutely necessary. 如果文本能够具有其他属性(例如前景色和背景色),也很好,但这不是绝对必要的。

You should divide your layout problem into multiple different layers. 您应该将布局问题分为多个不同的层。 First is how big and where your "windows" are. 首先是“窗口”的大小和位置。 Here I would either use bunch of stack panels or grids inside each other. 在这里,我要么在内部使用一堆堆栈面板,要么使用网格。 This can be little heavy-weight, but it will make your layout really flexible. 这可能有点笨重,但是它将使您的布局真正灵活。

Then I would use GroupBoxes to get that "Titled window" look. 然后,我将使用GroupBoxes获得“平铺的窗口”外观。 You can then set anything as their content. 然后,您可以将任何内容设置为其内容。

Something like this? 像这样吗

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="3*" />
            <RowDefinition Height="2*" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="2*"  />
                <ColumnDefinition Width="1*"  />
            </Grid.ColumnDefinitions>
            <GroupBox BorderThickness="1" BorderBrush="Black" Header="Window 1" Grid.Column="0">
                <TextBlock>This is some text that is being output for the user.</TextBlock>
            </GroupBox>
            <GroupBox BorderThickness="1" BorderBrush="Black" Header="Window 2" Grid.Column="1">
                <TextBlock>Yet more stuff</TextBlock>
            </GroupBox>
        </Grid>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="2*"  />
                <ColumnDefinition Width="3*"  />
            </Grid.ColumnDefinitions>
            <GroupBox BorderThickness="1" BorderBrush="Black" Header="Window 3" Grid.Column="0">
                <TextBlock>
                    Yoiks!
                    To eternity and beyond...
                </TextBlock>
            </GroupBox>
            <GroupBox BorderThickness="1" BorderBrush="Black" Header="Window 4" Grid.Column="1">
                <TextBlock>Blah blah blah</TextBlock>
            </GroupBox>
        </Grid>
    </Grid>

替代文字

There are countless ways to do this. 有无数种方法可以做到这一点。 The WPF controls are extremely flexible. WPF控件非常灵活。

 <Border Width="320" Height="200" Canvas.Left="40" Canvas.Top="72" BorderThickness="1" BorderBrush="Black">
        <DockPanel>
            <Label Content="Window 1" VerticalAlignment="Top" Width="320" Background="#FFFFE58B" DockPanel.Dock="Top" />
            <RichTextBox DockPanel.Dock="Bottom">
                <FlowDocument>
                    <Paragraph><Run Text="I am a fancy textbox"/></Paragraph>
                </FlowDocument>
            </RichTextBox>
        </DockPanel>
    </Border>

You should be able to do anything you need formatting wise in a rich text box 您应该能够在格式文本框中进行任何需要格式化的操作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM