Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何实现滚动内容而不是静态轴(如excel)_Wpf_Xaml_Itemscontrol - Fatal编程技术网

Wpf 如何实现滚动内容而不是静态轴(如excel)

Wpf 如何实现滚动内容而不是静态轴(如excel),wpf,xaml,itemscontrol,Wpf,Xaml,Itemscontrol,这对我来说是一个很难搜索的问题,更容易说明,这就是我想要实现的目标: 我有一个列表(Y轴),列表中的每个项目都包含一个列表项目属性(X轴),我希望在内容上有一个滚动条并保持标题固定。到目前为止,我已经尝试了垂直方向的Items控件,并且每行的模板都包含一个水平方向的Items控件,当然这不会给我静态标题,但我打算用一个虚拟模型或其他东西来破解它 有谁能告诉我,用现有的控制措施实现这一目标的最佳方法是什么。我遇到的问题是,它是动态的行和列 以下是当前嵌入的xaml,它无法实现我想要的: <

这对我来说是一个很难搜索的问题,更容易说明,这就是我想要实现的目标:

我有一个列表(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的行为,它具有固定的行和列标题。正是如此,我没有想到这样说,不幸的是,谷歌仍然没有给我太多帮助。目前有一个针对冻结行和列的现有解决方案,您可以调整模板以获得所需的外观。冻结列,这是我在使用数据网格实现所需功能时所缺少的,谢谢。这太棒了!我很高兴你喜欢它。如果你觉得在这些问题上受阻,请随时回来。快乐编码:)