C#中的WPF网格单元没有文本

时间:2012-11-16 11:41:44

标签: c# wpf wpf-controls

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

我在WPF窗口中创建了一个网格。它显示了文本框和一些标签,但没有显示文本。列标题,最后一列,gridseperators,网格机器人和左边缘也是不可见的。

Current status of my WPF window

我的网格称为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并在类构造函数中设置所有这些东西而不是单独的方法。

2 个答案:

答案 0 :(得分:1)

好吧,您似乎从不在标签或RichTextBox的Content上设置Document依赖项属性。

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

的内容
headerElement.SetBinding(Label.ContentProperty, new Binding());

答案 1 :(得分:0)

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

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;

现在文本有效,我应该可以让gridseperators工作。