代码之家  ›  专栏  ›  技术社区  ›  castletheperson

网格包装的WPF DataGrid不会水平滚动

  •  -3
  • castletheperson  · 技术社区  · 9 年前

    当窗口太小而无法显示所有列时,我试图使DataGrid水平滚动。我使用网格来控制元素的位置。有人能解释为什么滚动条没有出现,以及我如何修复它吗?如果可能的话,我更喜欢仅XAML的解决方案。

    这是我的完整代码。你可以随意评论你看到的任何奇怪的东西,因为我是WPF的新手。

    <Window x:Class="FBLAM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FBLAM"
        mc:Ignorable="d"
        Title="MainWindow" Width="800" Height="600">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Menu Grid.Row="0" Grid.Column="0" IsMainMenu="True" Height="20" VerticalAlignment="Top">
            Menu Goes Here
        </Menu>
        <Grid Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" Background="#FFF0F0F0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <Button Content="Button1" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center"/>
                <Button Content="Button2" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center" Margin="10,0,0,0"/>
            </StackPanel>
            <DataGrid 
                  Grid.Column="1" 
                  Grid.Row="1" 
                  x:Name="MemberData" 
                  AutoGenerateColumns="False" 
                  IsReadOnly="False" 
                  CanUserResizeColumns="True" 
                  CanUserAddRows="True" 
                  CanUserSortColumns="True" 
                  ItemsSource="{Binding}" 
                  SelectionMode="Single" 
                  HeadersVisibility="Column" 
                  HorizontalContentAlignment="Stretch" 
                  VerticalContentAlignment="Stretch" 
                  BorderThickness="0" 
                  Margin="0" 
                  GridLinesVisibility="Horizontal"
                  ScrollViewer.CanContentScroll="True" 
                  ScrollViewer.HorizontalScrollBarVisibility="Visible">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID" Binding="{Binding Id}" />
                    <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
                    <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
                    <DataGridTextColumn Header="School" Binding="{Binding School}" />
                    <DataGridTextColumn Header="State" Binding="{Binding State}" />
                    <DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}" />
                    <DataGridTextColumn Header="Year Joined" Binding="{Binding YearJoined}" />
                    <DataGridTextColumn Header="Grade" Binding="{Binding Grade}" />
                    <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}" />
                    <DataGridTextColumn Header="Amount Owed" Binding="{Binding AmountOwed, StringFormat=C}" />
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Grid>
    

    2 回复  |  直到 9 年前
        1
  •  0
  •   d.moncada    9 年前

    为什么你有 ColumnDefinition ActualWidth DataGrid ? 移除它。此外,将 ScrollViewer 属性添加到 数据网格 它本身

    <Window x:Class="MyProject.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:MyProject"
            mc:Ignorable="d"
            Title="MainWindow" Width="800" Height="600">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Menu Grid.Row="0" IsMainMenu="True" Height="20" VerticalAlignment="Top">
                //menu items
            </Menu>
            <Grid Grid.Row="1" HorizontalAlignment="Stretch" Background="#FFF0F0F0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                    <Button Content="Button1" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center"/>
                    <Button Content="Button2" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center" Margin="10,0,0,0"/>
                </StackPanel>
                <DataGrid Grid.Column="1" 
                          Grid.Row="1" 
                          AutoGenerateColumns="False" 
                          IsReadOnly="False" 
                          CanUserResizeColumns="True" 
                          CanUserAddRows="True" 
                          CanUserSortColumns="True" 
                          ItemsSource="{Binding}" 
                          SelectionMode="Single" 
                          HeadersVisibility="Column" 
                          HorizontalContentAlignment="Stretch" 
                          VerticalContentAlignment="Stretch" 
                          BorderThickness="0" 
                          Margin="0" 
                          GridLinesVisibility="Horizontal"
                          ScrollViewer.CanContentScroll="True" 
                          ScrollViewer.HorizontalScrollBarVisibility="Visible" >
                    <DataGrid.Columns>
                        //10 columns here
                    </DataGrid.Columns>
                </DataGrid>
            </Grid>
        </Grid>
    </Window>
    
        2
  •  0
  •   castletheperson    9 年前

    经过一番搜索,我终于找到了导致问题的原因以及解决方法。

    在这里: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e6750a6a-fc94-496e-9a94-10e48831a4d2/simply-want-auto-width-on-control-but-to-have-a-horizontal-scrollbar-if-parent-is-too-narrow?forum=wpf

    我只需要在整个网格周围放置一个ScrollViewer。谈简单!

    非常感谢@d。蒙达达让我走上了正确的道路。