WPF自定义datagrid幻像标头重叠

时间:2019-05-08 18:57:13

标签: custom-controls wpfdatagrid

我写了一个自Datagrid派生的自定义控件。 当我使用自定义网格时,它在其他网格后面显示一个重叠的列标题,我不确定为什么。 这是我的问题的屏幕截图:

Phantom column header overlapping actual columns

这是我用来称呼它的XAML:

<FDG:FilterDataGrid x:Name ="Jurisds"  MaxHeight="400" AutoGenerateColumns="False" VerticalScrollBarVisibility="Visible" HeadersVisibility="Column">
<DataGrid.Columns>
    <DataGridTextColumn Header="Region" Binding = "{Binding Region, Mode=OneWay}"/>
    <DataGridTextColumn Header = "Municipality" Binding = "{Binding Jurisd, Mode=OneWay}"/>
    <DataGridTextColumn Header = "Analysis" Binding = "{Binding AnalysisExists, Mode=OneWay}" />
    <DataGridTextColumn Header = "Brief" Binding = "{Binding StratBriefExists, Mode=OneWay}" />
    <DataGridHyperlinkColumn Header="Missing Nbhds" Binding="{Binding MissingNbhds, Mode=OneWay}">
    <DataGridHyperlinkColumn.ElementStyle>
        <Style>
        <EventSetter Event="Hyperlink.Click" Handler="nbhdsScreen"/>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
    </DataGridHyperlinkColumn>
    <DataGridHyperlinkColumn Header="All Strats Approved" Binding="{Binding StratsApproved, Mode=OneWay}">
    <DataGridHyperlinkColumn.ElementStyle>
        <Style>
        <EventSetter Event="Hyperlink.Click" Handler="stratsScreen"/>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
    </DataGridHyperlinkColumn>
</DataGrid.Columns>
</FDG:FilterDataGrid>

在后面的代码中,我将ItemsSource设置为名为 JurisdictionData 的对象。 看起来它是自动生成列标题,然后生成适当的列。为什么要创建此JurisdictionData标头,以及如何停止/删除它?

1 个答案:

答案 0 :(得分:0)

使用的DataGridColumnHeader对象包含一个DataGridColumnHeadersPresenter对象。 我编写的自定义数据网格为DataGridColumnHeader创建了自定义样式,但没有为DataGridColumnHeadersPresenter创建自定义样式。 为了解决此问题,我为DataGridColumnHeadersPresenter创建了一种样式,该样式仅在自定义datagrid Style.Resources部分中包含ItemsPresenter。

<Style  TargetType="{x:Type DataGridColumnHeadersPresenter}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
                        <Grid>
                            <!--<DataGridColumnHeader x:Name="PART_FillerColumnHeader" IsHitTestVisible="False" />-->
                            <ItemsPresenter />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

回答PART_FillerColumnHeader