WPF如何创建一个网格,可以滚动与静态列和行标题
本文关键字:静态 滚动 标题 网格 何创建 创建 WPF 一个 | 更新日期: 2023-09-27 18:06:00
我已经创建了一个带有列和行标题的自定义网格。网格中的单元格是空的。我想做的是为它创建一个类似于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个网格的码头面板的画布。2个网格用于标题,1个网格用于内部单元格。单元格是动态创建的。
我正在制作一个自定义网格,因为我需要在网格上叠加一个背景图像。我尝试使用免费的电子表格控件,但没有找到一个可以有背景图像。我的网格需要具备的唯一其他行为是选择单元格或单元格范围的能力。
我已经尝试了滚动条和滚动查看器与网格,但这使得线条不稳定和不均匀。我对WPF编程并不陌生,但我离专家还差得远。
我将使用一个简单的DataGrid
。它已经自动冻结标题,你可以通过FrozenColumnCount
属性冻结列。
您可以通过设置Background
属性为ImageBrush
来获得背景图像。
可以通过设置SelectionMode
到DataGridSelectionMode.Extended
来控制选择范围。
下面是如何为单个单元格应用特殊背景色和其他类型的格式:
<DataGrid.CellStyle>
<Style TargetType="{x:Type wpf:DataGridCell}">
<Setter Property="Background" Value="{Binding SomeColorProperty, Converter={StaticResource cellBackgroundConverter}}" />
<Setter Property="FontWeight" Value="{Binding SomeWeightProperty, Converter={StaticResource cellWeightConverter}}" />
.....
</Style>
</DataGrid.CellStyle>