Wpf 如何实现滚动内容而不是静态轴(如excel)
这对我来说是一个很难搜索的问题,更容易说明,这就是我想要实现的目标: 我有一个列表(Y轴),列表中的每个项目都包含一个列表项目属性(X轴),我希望在内容上有一个滚动条并保持标题固定。到目前为止,我已经尝试了垂直方向的Items控件,并且每行的模板都包含一个水平方向的Items控件,当然这不会给我静态标题,但我打算用一个虚拟模型或其他东西来破解它 有谁能告诉我,用现有的控制措施实现这一目标的最佳方法是什么。我遇到的问题是,它是动态的行和列 以下是当前嵌入的xaml,它无法实现我想要的:Wpf 如何实现滚动内容而不是静态轴(如excel),wpf,xaml,itemscontrol,Wpf,Xaml,Itemscontrol,这对我来说是一个很难搜索的问题,更容易说明,这就是我想要实现的目标: 我有一个列表(Y轴),列表中的每个项目都包含一个列表项目属性(X轴),我希望在内容上有一个滚动条并保持标题固定。到目前为止,我已经尝试了垂直方向的Items控件,并且每行的模板都包含一个水平方向的Items控件,当然这不会给我静态标题,但我打算用一个虚拟模型或其他东西来破解它 有谁能告诉我,用现有的控制措施实现这一目标的最佳方法是什么。我遇到的问题是,它是动态的行和列 以下是当前嵌入的xaml,它无法实现我想要的: <
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.Template>
<ControlTemplate>
<ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Description}"
Width="150" />
<ItemsControl ItemsSource="{Binding Path=Weeks}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Width="30" IsChecked="{Binding Path=IsSelected}"></CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我想您可能只是在寻找一个数据网格
如果没有,您可能只需要做一些开发
尝试将标题放入ScrollViewer
s中,并将其偏移量属性绑定到内容的ScrollViewer
。您可能无法简单地对它们进行数据绑定,因此可能需要在代码隐藏中执行此操作
看看这里的房产和房子。这可能并不重要,因为所有的列和行看起来都是相同的宽度和高度。我尝试了一个简单的解决方案,下面是一个示例
<DataGrid FrozenColumnCount="1"
HorizontalGridLinesBrush="{x:Null}"
VerticalGridLinesBrush="{x:Null}"
RowHeaderWidth="0">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background"
Value="White" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True"
Binding="{Binding}" />
<DataGridCheckBoxColumn Header="1" />
<DataGridCheckBoxColumn Header="2" />
<DataGridCheckBoxColumn Header="3" />
<DataGridCheckBoxColumn Header="4" />
<DataGridCheckBoxColumn Header="5" />
<DataGridCheckBoxColumn Header="6" />
<DataGridCheckBoxColumn Header="7" />
<DataGridCheckBoxColumn Header="8" />
<DataGridCheckBoxColumn Header="9" />
<DataGridCheckBoxColumn Header="10" />
<DataGridCheckBoxColumn Header="11" />
<DataGridCheckBoxColumn Header="12" />
<DataGridCheckBoxColumn Header="13" />
<DataGridCheckBoxColumn Header="14" />
<DataGridCheckBoxColumn Header="15" />
<DataGridCheckBoxColumn Header="16" />
<DataGridCheckBoxColumn Header="17" />
<DataGridCheckBoxColumn Header="18" />
<DataGridCheckBoxColumn Header="19" />
<DataGridCheckBoxColumn Header="20" />
</DataGrid.Columns>
<sys:String>A</sys:String>
<sys:String>B</sys:String>
<sys:String>C</sys:String>
<sys:String>D</sys:String>
<sys:String>E</sys:String>
<sys:String>F</sys:String>
<sys:String>G</sys:String>
<sys:String>H</sys:String>
<sys:String>I</sys:String>
<sys:String>J</sys:String>
<sys:String>K</sys:String>
<sys:String>AA</sys:String>
<sys:String>AB</sys:String>
<sys:String>AC</sys:String>
<sys:String>AD</sys:String>
<sys:String>AE</sys:String>
<sys:String>AF</sys:String>
<sys:String>AG</sys:String>
<sys:String>AH</sys:String>
<sys:String>AI</sys:String>
<sys:String>AJ</sys:String>
<sys:String>AK</sys:String>
</DataGrid>
A.
B
C
D
E
F
G
H
我
J
K
AA
AB
自动控制
公元
AE
空军
银
啊
人工智能
AJ
AK
结果
如果您对左上角的常规datagrid标记满意,那么这里有一个没有冻结列的解决方案
<DataGrid HorizontalGridLinesBrush="{x:Null}"
VerticalGridLinesBrush="{x:Null}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background"
Value="White" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.RowHeaderStyle>
<Style TargetType="DataGridRowHeader">
<Setter Property="Background"
Value="White" />
<Setter Property="Content"
Value="{Binding}" />
</Style>
</DataGrid.RowHeaderStyle>
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="1" />
<DataGridCheckBoxColumn Header="2" />
<DataGridCheckBoxColumn Header="3" />
<DataGridCheckBoxColumn Header="4" />
<DataGridCheckBoxColumn Header="5" />
<DataGridCheckBoxColumn Header="6" />
<DataGridCheckBoxColumn Header="7" />
<DataGridCheckBoxColumn Header="8" />
<DataGridCheckBoxColumn Header="9" />
<DataGridCheckBoxColumn Header="10" />
<DataGridCheckBoxColumn Header="11" />
<DataGridCheckBoxColumn Header="12" />
<DataGridCheckBoxColumn Header="13" />
<DataGridCheckBoxColumn Header="14" />
<DataGridCheckBoxColumn Header="15" />
<DataGridCheckBoxColumn Header="16" />
<DataGridCheckBoxColumn Header="17" />
<DataGridCheckBoxColumn Header="18" />
<DataGridCheckBoxColumn Header="19" />
<DataGridCheckBoxColumn Header="20" />
</DataGrid.Columns>
<sys:String>A</sys:String>
<sys:String>B</sys:String>
<sys:String>C</sys:String>
<sys:String>D</sys:String>
<sys:String>E</sys:String>
<sys:String>F</sys:String>
<sys:String>G</sys:String>
<sys:String>H</sys:String>
<sys:String>I</sys:String>
<sys:String>J</sys:String>
<sys:String>K</sys:String>
<sys:String>AA</sys:String>
<sys:String>AB</sys:String>
<sys:String>AC</sys:String>
<sys:String>AD</sys:String>
<sys:String>AE</sys:String>
<sys:String>AF</sys:String>
<sys:String>AG</sys:String>
<sys:String>AH</sys:String>
<sys:String>AI</sys:String>
<sys:String>AJ</sys:String>
<sys:String>AK</sys:String>
</DataGrid>
A.
B
C
D
E
F
G
H
我
J
K
AA
AB
自动控制
公元
AE
空军
银
啊
人工智能
AJ
AK
如果我理解正确,您正在寻找类似excel的行为,它具有固定的行和列标题。正是如此,我没有想到这样说,不幸的是,谷歌仍然没有给我太多帮助。目前有一个针对冻结行和列的现有解决方案,您可以调整模板以获得所需的外观。冻结列,这是我在使用数据网格实现所需功能时所缺少的,谢谢。这太棒了!我很高兴你喜欢它。如果你觉得在这些问题上受阻,请随时回来。快乐编码:)