DataGrid格式内的WPF RichTextBox搞砸了

时间:2014-05-29 22:17:03

标签: wpf datagrid richtextbox

我需要在DataGrid的列中使用RichTextBoxes。这是通过xaml通过

完成的
<DataGrid x:Name="ui_tblInputs"
                Grid.Row="0" Grid.Column="2" Grid.RowSpan="3"
                AutoGenerateColumns="False"
                HeadersVisibility="Column"
                CanUserSortColumns="False"
                HorizontalAlignment="Center"
                ItemsSource="{Binding InputPorts, Mode=OneWay}"
                SelectedItem="{Binding SelectedInputPort}"
                SelectionMode="Single"
                >
    <DataGrid.Columns>
        <DataGridTextColumn
                        Header="Inputs"
                        Width="SizeToCells"
                        MinWidth="50"
                        Binding="{Binding Name, Mode=TwoWay}"
                        />
        <DataGridTemplateColumn
                        Header="Test Value"
                        Width="SizeToCells"
                        MinWidth="100"
                        >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RichTextBox
                                    IsReadOnly="True"
                                    >
                        <FlowDocument>
                            <Paragraph>
                                <Run Text="some text"/>
                            </Paragraph>
                        </FlowDocument>
                    </RichTextBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

问题是,RichTextBox中的文本是出现在它自己的行上的每个字符。即。

image output

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:4)

您可以为DataGridTemplateColumn指定一个名称:x:Name="ThisColumn"然后在RichTextBox中设置宽度,如下所示:

Width="{Binding ElementName=ThisColumn, Path=ActualWidth}"

更新: 好的问题是这里的错误是一个解决方法。设置&#34; FlowDocument&#34;宽度为RichTextBox宽度,取宽度为单元格。

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <RichTextBox 
            x:Name="My_RTB"
            IsReadOnly="True">
            <FlowDocument
                PageWidth="{Binding ElementName=My_RTB, Path=ActualWidth}">
                <Paragraph>
                    <Run Text="some text"/>
                </Paragraph>
            </FlowDocument>
        </RichTextBox>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>