WPF如何创建可以使用静态列和行标题滚动的网格

时间:2016-09-06 19:34:29

标签: c# .net wpf

我创建了一个带有列和行标题的自定义网格。网格中的单元格为空。我想要做的是在滚动方面为它创建一个类似excel的行为。我需要添加一个水平和垂直滚动条。当您垂直滚动时,我需要列标题保持原位并且行标题要滚动。当您水平滚动时,我需要行列保持原位并滚动列标题。这是我目前为网格提供的代码:

<Canvas x:Name="canvas_blueprint" ClipToBounds="True" Width="{Binding ActualWidth, ElementName=canvas}" Height="{Binding ActualHeight, ElementName=canvas}">
            <DockPanel>
                <Grid x:Name="grid_column_header" DockPanel.Dock="Top" Height="25" Width="{Binding ActualWidth, ElementName=canvas}"></Grid>
                <Grid x:Name="grid_row_header" DockPanel.Dock="Left" Width="25" Height="{Binding ActualHeight, ElementName=canvas}" Margin="0,-25,0,0"></Grid>
                <Grid x:Name="grid_blueprint" DockPanel.Dock="Right" Height="{Binding ActualHeight, ElementName=image_blueprint}" Width="{Binding ActualWidth, ElementName=image_blueprint}">
                    <Grid.Background>
                        <ImageBrush x:Name="imagebrush_blueprint"/>
                    </Grid.Background>
                </Grid>
            </DockPanel>
        </Canvas>

基本上它是一个带有包含3个网格的dockpanel的画布。标题为2个网格,内部单元格为1个网格。单元格是动态创建的。

我正在制作自定义网格,因为我需要在网格上叠加背景图像。我尝试使用免费的电子表格控件,但没有找到可以有背景图像的控件。我的网格需要具备的唯一其他行为是能够选择一个单元格或一系列单元格。

我已尝试使用网格滚动条和滚动查看器,但这会使线条变得不稳定且不均匀。我对WPF编程并不陌生,但我与专家无关。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

我只想使用一个简单的Partition Keys。它已经自动冻结了标题,您可以通过DataGrid属性冻结列。

您可以将FrozenColumnCount属性设置为Background来获得背景图片。

可以通过将ImageBrush设置为SelectionMode来控制选择范围。

以下是将特殊背景颜色和其他类型的格式应用于单个单元格的方法:

DataGridSelectionMode.Extended