WPF - Datagrid占位符隐藏文本框中的输入文本

时间:2017-11-30 07:00:46

标签: c# wpf datagrid

我有一个启用了CanUserAddRows的简单数据网格:

我有一个文本框可以在Datagrid占位符的Total列输入总数,但是只要我完成输入,该值就会隐藏,就像那里有一个看不见的水印或其他东西。

<DataGrid x:Name="dgReceivables" Margin="8,98,10,91" Grid.ColumnSpan="2" AutoGenerateColumns="False" 
    KeyUp="dgReceivables_KeyUp" GridLinesVisibility="None" CellEditEnding="dgReceivables_CellEditEnding"
              LoadingRow="dgReceivables_LoadingRow" TextInput="dgReceivables_TextInput" HorizontalContentAlignment="Center">


    <DataGrid.Columns>
        <DataGridTemplateColumn Header="TOTAL 2" Width="Auto">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate >
                    <StackPanel>
                        <TextBox x:Name="txtTotal" Text="{Binding Total,StringFormat={}{0:0.00}}"/>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Inputting sample value

AFter lost focus

1 个答案:

答案 0 :(得分:1)

您缺少CellTemplate

为什么?

例如,如果您使用DataGridTextColumn列而不是覆盖,DataGird将会知道所包含的数据是Text(字符串)。 在这种情况下,DataGird会分别使用TextBlockTextBox作为CellTemplateCellEditingTemplate

通过覆盖 DataGridTemplateColumn ,您完全取代了列行为。这意味着DataGrid 无法确定如何显示/编辑列中的数据。它仍然可能是一个字符串,但这并不意味着你实际上解释了这个字符串,它可能是你希望在DataGrid中显示的图像的路径。

由于您只提供了 CellEditingTemplate ,DataGrid现在知道如何编辑该列中的数据,但不知道如何显示它。

解决方案

当覆盖DataGridTemplateColumn时,您需要提供至少 CellTemplate,因为这定义了如何解释(显示)该列中的数据。如果您希望该列仅显示数据,则只需执行此操作。

试试这个:

<DataGrid.Columns>
    <DataGridTemplateColumn Header="TOTAL 2" Width="Auto">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Total, Mode=OneWay}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate >
                <StackPanel>
                    <TextBox x:Name="txtTotal" Text="{Binding Total,StringFormat={}{0:0.00}}"/>
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

注意:代码未经测试!