Какой элемент управления WPF я должен использовать для этого желаемого формата вывода? - PullRequest
0 голосов
/ 05 октября 2010

У меня есть некоторые данные, которые мне нужно представить пользователю в очень специфическом формате, и я хочу что-то похожее на это:

+- 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... | |                               |
|                           | |                               |
+---------------------------+ +-------------------------------+

Будет несколько таких предметов с разными заголовками, и они будут иметь фиксированные размеры (каждый раздел будет иметь разный размер, но размеры каждого раздела фиксированы). Текст внутри разделов будет фиксированным шрифтом (например, Courier), а не пропорциональным.

У меня уже есть настроенные WPF StackPanels, чтобы правильно расположить эти элементы управления так, как я хочу. Все, что мне нужно знать, - это какой элемент управления лучше использовать для реального контента (красивый фрейм и заголовок с текстом фиксированного размера внутри).

Еще одна вещь, мне нужно иметь возможность подчеркнуть один или несколько символов внутри элемента управления. В моей версии Java я мог использовать HTML для этого. Также было бы неплохо, если бы текст мог иметь другие свойства (например, цвет переднего плана и фона), но это не является абсолютно необходимым.

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Вы должны разделить проблему макета на несколько разных слоев.Во-первых, насколько велики и где ваши «окна».Здесь я бы использовал кучу панелей стека или сетки внутри друг друга.Это может быть немного тяжеловесно, но это сделает ваш макет действительно гибким.

Тогда я бы использовал GroupBoxes, чтобы получить вид «Окно с заголовком».Затем вы можете установить что угодно в качестве их содержимого.

Как-то так?

<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>

alt text

1 голос
/ 05 октября 2010

Есть бесчисленное множество способов сделать это.Элементы управления 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>

Вы должны иметь возможность делать все, что вам нужно, в форматированном текстовом поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...