Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf ItemsSource数据类型显示在DataGrid中_Wpf_Xaml_Datagrid - Fatal编程技术网

Wpf ItemsSource数据类型显示在DataGrid中

Wpf ItemsSource数据类型显示在DataGrid中,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我在网格中的StackPanel中使用DataGrid,这会导致GridView比其首选大小更宽。所有列均正确显示,但在最后一列之后,将显示ItemsSource数据类型名称的结尾。显然,它是在背景中绘制的,在正常情况下由列隐藏 我试图添加一个带有MinWidth=“0”和Width=“*”的空列,但如有必要,不会显示水平滚动条 如何隐藏数据类型文本 XAML代码: <Grid Margin="5,5,5,5" Grid.IsSharedSizeScope="True"

我在网格中的StackPanel中使用DataGrid,这会导致GridView比其首选大小更宽。所有列均正确显示,但在最后一列之后,将显示ItemsSource数据类型名称的结尾。显然,它是在背景中绘制的,在正常情况下由列隐藏

我试图添加一个带有MinWidth=“0”和Width=“*”的空列,但如有必要,不会显示水平滚动条

如何隐藏数据类型文本

XAML代码:

    <Grid Margin="5,5,5,5"
      Grid.IsSharedSizeScope="True">
    <Grid.RowDefinitions>
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="30" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Row="0"
                Grid.Column="0"
                Orientation="Vertical">
        <DataGrid ItemsSource="{Binding BudgetPositions}"
                  IsSynchronizedWithCurrentItem="True"
                  AutoGenerateColumns="False"
                  GridLinesVisibility="None"
                  HeadersVisibility="Column"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False">
            <DataGrid.Resources>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <!-- Budget group column -->
                <DataGridTemplateColumn Header="Budget Group"
                                        Width="Auto">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock DataContext="{Binding GroupName}"
                                       Text="{Binding Value}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

                <!-- Budget position column -->
                <DataGridTemplateColumn Header="Budget Position"
                                        Width="Auto">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock DataContext="{Binding PositionName}"
                                       Text="{Binding Value}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Add budget position"
                x:Name="addPositionButton"
                Width="140"
                Command="{Binding BudgetPositions.AddNewCommand}" />
    </StackPanel>
    ...

...

以下是DataGrid的屏幕截图:


Cheers AC

您发布的XAML不会显示任何类型名称。我的最佳猜测是,在StackPanel后面呈现的网格的第0行和第0列中有另一个控件,并且内容是一个不覆盖ToString的对象,因此它显示类型名称


如果有帮助:如果不希望GridView比其首选大小更宽,可以将StackPanel或DataGrid上的属性设置为Left、Right或Center。(此外,如果数据类型名称是StackPanel的一部分,则在StackPanel上设置该名称应使其再次隐藏。如果它不是StackPanel的一部分,则如果将StackPanel设置为右对齐或居中对齐,则它将不会移动,这可能会使renegade元素更容易找到。)

显示类型名的不是我的XAML,而是数据网格。文本不在DataGrid后面,而是在DataGrid的列后面。DataGrid的样式应用于类型名文本。@Anonymous Coward:您有DataGrid的自定义模板或任何自定义样式吗?你在跑什么主题?如果我运行您在新WPF项目中发布的XAML,并添加足够的数据上下文以使绑定正常工作,则不会显示任何类型名称。“你在一个空洞的项目上有过这种行为吗?”匿名懦夫:我试过了,但还是没看到文字。我的标题是灰色的,而你的截图显示的是蓝色的,所以我必须使用不同的主题。@Anonymous Coward:你有可能影响System.Windows.Controls.Primitives.DataGridColumnHeader的样式吗?它看起来像是通过在后台将一个DataGridColumnHeader延伸到整个控件,然后在前台将一个DataGridColumnHeader延伸到每一列来呈现标题。背景标题应该没有内容,但您可能正在使用样式覆盖它。