0

我需要用彩色字母和背景颜色的行以结构化的方式显示一些数据。

我在 WPF 窗口中制作了一个网格。它显示文本框和一些标签,但不显示任何文本。列标题、最后一列、网格分隔符、网格机器人和左边缘也是不可见的。

我的 WPF 窗口的当前状态

我的网格称为 propertiesView。

添加标题元素(标签)的代码

    private void AddHeaderElement(string text, int row, int col)
    {
        Label headerElement = new Label();
        headerElement.Height = cellHeight;
        headerElement.Width = cellWidth;
        headerElement.DataContext = text;
        headerElement.Background = headerBackground;
        headerElement.BorderBrush = new SolidColorBrush(Color.FromRgb(120, 120, 120));
        headerElement.BorderThickness = new Thickness(3);

        propertiesView.Children.Add(headerElement);
        Grid.SetRow(headerElement, row);
        Grid.SetColumn(headerElement, col);
    }

添加单元格的代码

RichTextBox cell = new RichTextBox();

cell.Height = cellHeight;
cell.Width = cellWidth;
cell.ToolTip = toolTip;
cell.DataContext = text;
cell.Background = rowDifferent;

propertiesView.Children.Add(cell);

//box.SetValue(Grid.RowProperty, rowCount);
//box.SetValue(Grid.ColumnProperty, columnCount);
Grid.SetRow(cell, rowCount);
Grid.SetColumn(cell, columnCount);

添加网格分隔符的代码

GridSplitter colSeperator = new GridSplitter();
colSeperator.Margin = new Thickness(-2.5, 0, 0, 0);
colSeperator.Width = 5;
colSeperator.ResizeDirection = GridResizeDirection.Columns;
colSeperator.ResizeBehavior = GridResizeBehavior.CurrentAndNext;
colSeperator.VerticalAlignment = VerticalAlignment.Stretch;
colSeperator.HorizontalAlignment = HorizontalAlignment.Left;

propertiesView.Children.Add(colSeperator);
Grid.SetColumn(colSeperator, 0);
Grid.SetRowSpan(colSeperator, totalRows + 1);

工具提示确实显示了正确的文本。我尝试使用 TextBox 而不是 RichTextBox 并在类构造函数中设置所有这些东西而不是单独的方法。

4

2 回答 2

1

好吧,您似乎从未在标签或RichTextBoxesContent上设置依赖项属性。Document

对于您的标签,当您将text参数设置为 DataContext 时,您可以添加类似

headerElement.SetBinding(Label.ContentProperty, new Binding());
于 2012-11-16T11:50:53.803 回答
0

原来我需要带有文本块、跨度和运行的标签。可以在跨度上添加样式(通过 Foreground、TextDecoration 或 FontWeight 等属性)。将文本添加到 Run 内的 span,然后将所有 span 添加到 textblock,通过标签显示。

Span span = new Span();
span.Foreground = Brushes.Black;
span.Inlines.Add(new Run("Text"));

textBlock.Inlines.Add(span);

Label cell = new Label();

cell.MinHeight = cellHeight;
cell.MaxWidth = cellWidth * 3;
cell.MinWidth = cellWidth;
cell.ToolTip = "toolTip";
cell.BorderThickness = new Thickness(2);

TextBlock cellText = new TextBlock();
cellText.HorizontalAlignment = HorizontalAlignment.Stretch;
cellText.TextWrapping = TextWrapping.WrapWithOverflow;

cell.Content = cellText;

文本现在有效,我应该能够让网格分隔符工作。

于 2012-11-20T11:12:05.000 回答