我已经定制了
DataGrid
很多,但令人惊讶的是,我无法添加一个边界周围的整个标题区没有打破它。
以下控件负责显示标题区域:
DataGridColumnHeadersPresenter
.
我在它周围添加了一个边框,从上面的屏幕截图可以看出,它确实有效,但是问题只在
网格为空!
CanUserAddRows="False"
).
到目前为止,我的风格是:
<Border BorderBrush="Red" BorderThickness="1" Grid.Column="1">
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Margin="0,0,0,5"
Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
</DataGridColumnHeadersPresenter>
</Border>
我所做的只是用一个边框将其包装起来,但是现在当我应用过滤以使网格为空时,标题会消失在右边,应用程序会慢下来爬行。
演示:
如果我去掉边界,一切都会正常。看起来DataGrid需要一个非常特殊的树结构,否则它就爆炸了。
,但也需要一个非常特殊的结构,如下所示:
<DataGridColumnHeadersPresenter.Template>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<DataGridColumnHeader x:Name="PART_FillerColumnHeader"
IsHitTestVisible="False" />
<ItemsPresenter />
</Grid>
</ControlTemplate>
</DataGridColumnHeadersPresenter.Template>
如果我给你
DataGridColumnHeader
BorderBrush
和
BorderThickness
实际上有
边缘刷
边界厚度
属性,但它们没有任何效果。
我找到的一个解决办法是
Grid.Column
到
0
这样它就代替了行标题和列标题,然后设置
HeadersVisibility="Column"
上
这样看起来就不会坏,问题就消失了。不幸的是,我需要行标题,所以这是一个不可接受的解决方案。
可以找到DataGrid的默认样式
here
,或者在VisualStudio中右键单击它并转到“编辑模板”,然后编辑一个副本,这就是我所做的。
必须有一个简单的方法来完成这一点,我可能只是没有看到现在。。。